android things 点亮LED
adb 连接到树莓派,运行点亮
led
程序
效果图
连接led
1. 从树莓派的一个GPIO引脚(Pin31-BCM6)串联一个电阻(300Ω~1KΩ),连接LED正极(LED灯的长脚)
2. 树莓派负极连接LED负极
核心代码
在子线程中每隔一秒切换下I/O电平信号,刷新LED状态
private Runnable mBlinkRunnable = new Runnable() {
@Override
public void run() {
// Exit Runnable if the GPIO is already closed
if (mLedGpio == null) {
return;
}
try {
// Toggle the GPIO state
mLedState = !mLedState;
mLedGpio.setValue(mLedState);
Log.d(TAG, "State set to " + mLedState);
// Reschedule the same runnable in {#INTERVAL_BETWEEN_BLINKS_MS} milliseconds
mHandler.postDelayed(mBlinkRunnable, INTERVAL_BETWEEN_BLINKS_MS);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
};
获取连接LED的引脚端口,不同设备对应的端口名称不一样注意区分
@SuppressWarnings("WeakerAccess")
public class BoardDefaults {
private static final String DEVICE_RPI3 = "rpi3";
private static final String DEVICE_IMX6UL_PICO = "imx6ul_pico";
private static final String DEVICE_IMX7D_PICO = "imx7d_pico";
/**
* Return the GPIO pin that the LED is connected on.
* For example, on Intel Edison Arduino breakout, pin "IO13" is connected to an onboard LED
* that turns on when the GPIO pin is HIGH, and off when low.
*/
public static String getGPIOForLED() {
switch (Build.DEVICE) {
case DEVICE_RPI3:
return "BCM6";
case DEVICE_IMX6UL_PICO:
return "GPIO4_IO22";
case DEVICE_IMX7D_PICO:
return "GPIO2_IO02";
default:
throw new IllegalStateException("Unknown Build.DEVICE " + Build.DEVICE);
}
}
}
初始化设置拉低电平信号,开启信号切换线程。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "Starting BlinkActivity");
try {
String pinName = BoardDefaults.getGPIOForLED();
mLedGpio = PeripheralManager.getInstance().openGpio(pinName);
mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
Log.i(TAG, "Start blinking LED GPIO pin");
// Post a Runnable that continuously switch the state of the GPIO, blinking the
// corresponding LED
mHandler.post(mBlinkRunnable);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}