automation-hat

Crates.ioautomation-hat
lib.rsautomation-hat
version0.1.1
created_at2025-07-22 13:31:35.612537+00
updated_at2025-07-22 14:35:24.721904+00
descriptionA Rust library for the Pimoroni Automation HAT
homepage
repositoryhttps://github.com/JudahZF/automation-hat
max_upload_size
id1763526
size52,442
Judah Fuller (JudahZF)

documentation

README

Automation HAT Rust Library

A Rust library for controlling the Pimoroni Automation HAT, Automation pHAT, and Automation HAT Mini.

Features

  • Control relays, digital outputs, and read digital/analog inputs
  • Full LED control with automatic status indication
  • Support for all Automation HAT variants (HAT, pHAT, Mini)
  • Display support for Automation HAT Mini

Installation

Add this to your Cargo.toml:

[dependencies]
automation-hat = "0.1.0"

Hardware Setup

This library requires I2C and SPI to be enabled on your Raspberry Pi. You can enable these interfaces using raspi-config.

Usage Examples

Basic Usage

use automation_hat::{AutomationHAT, HatType};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a new AutomationHAT instance
    let mut hat = AutomationHAT::new(HatType::AutomationHAT);
    
    // Toggle relay 3
    hat.relays.three.write(true)?;
    
    // Read digital input 1
    let input_value = hat.inputs.one.read()?;
    println!("Input 1: {}", input_value);
    
    // Set digital output 2
    hat.outputs.two.write(true)?;
    
    // Read analog input 3
    let analog_value = hat.analog_inputs.three.read()?;
    println!("Analog 3: {}", analog_value);
    
    Ok(())
}

Automation HAT Mini with Display

use automation_hat::{AutomationHAT, HatType};
use embedded_graphics::{
    mono_font::MonoTextStyleBuilder,
    pixelcolor::Rgb565,
    prelude::*,
    primitives::{Rectangle, PrimitiveStyleBuilder},
    text::{Baseline, Text},
};
use embedded_graphics_core::primitives::Rectangle;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut hat = AutomationHAT::new(HatType::AutomationHATMini);
    
    if let Some(ref mut display) = hat.display {
        // Clear display
        let style = PrimitiveStyleBuilder::new()
            .fill_color(Rgb565::BLACK)
            .build();
        
        Rectangle::new(Point::new(0, 0), Size::new(160, 80))
            .into_styled(style)
            .draw(display)?;
            
        // Draw some text
        let text_style = MonoTextStyleBuilder::new()
            .font(&FONT_6X10)
            .text_color(Rgb565::WHITE)
            .build();
            
        Text::with_baseline("Automation HAT", Point::new(10, 20), text_style, Baseline::Top)
            .draw(display)?;
    }
    
    Ok(())
}

Device Support

The library supports:

  • Automation HAT: 3 relays, 3 analog inputs, 3 digital inputs, 3 digital outputs, with indicator LEDs for all channels
  • Automation pHAT: 1 relay, 3 analog inputs, 3 digital inputs, 3 digital outputs, no indicator LEDs
  • Automation HAT Mini: 3 relays, 3 analog inputs, 3 digital inputs, 3 digital outputs, no indicator LEDs, but includes a 0.96" color LCD display

API Reference

Initialization

// Create an AutomationHAT instance
let mut hat = AutomationHAT::new(HatType::AutomationHAT);

You can choose between:

  • HatType::AutomationHAT
  • HatType::AutomationPHAT
  • HatType::AutomationHATMini

Relays

Relays provide a high-power switch controlled by the Raspberry Pi.

// Set relay state (true = on, false = off)
hat.relays.one.write(true)?; // Only available on HAT and pHAT
hat.relays.two.write(true)?; // Only available on HAT and pHAT
hat.relays.three.write(true)?;

// Get relay state
let state = hat.relays.three.value;

Digital Outputs

Digital outputs provide 5V signals for controlling external devices.

// Set output state (true = on, false = off)
hat.outputs.one.write(true)?;
hat.outputs.two.write(true)?;
hat.outputs.three.write(true)?;

// Get output state
let state = hat.outputs.one.value;

Digital Inputs

Digital inputs read 5V signals from external devices.

// Read input state (returns true for high, false for low)
let input1 = hat.inputs.one.read()?;
let input2 = hat.inputs.two.read()?;
let input3 = hat.inputs.three.read()?;

Analog Inputs

Analog inputs read variable voltage levels from external devices.

// Read analog value (returns a float from 0.0 to 1.0)
let analog1 = hat.analog_inputs.one.read()?;
let analog2 = hat.analog_inputs.two.read()?;
let analog3 = hat.analog_inputs.three.read()?;

Display (Automation HAT Mini only)

The Automation HAT Mini includes a 0.96" 160x80 color LCD display.

if let Some(ref mut display) = hat.display {
    // Use embedded-graphics to draw to the display
    // See embedded-graphics documentation for more details
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgements

Commit count: 0

cargo fmt