感谢EEPW推出的“换取手持示波器”活动,本次分享的主题是:使用Arduino UNO R4 Wi-Fi搭配颜色传感器,并通过WIFI连接到Home Assistant,从而实现远程获取传感器信息。
接下来会介绍传感器采集,HomeAssistant平台搭建,MQTT协议的使用等诸多细节。
一、主控芯片:ArduinoUNO R4 WiFi简介
Arduino UNO R4 WiFi 将瑞萨电子的 RA4M1 微处理器与乐鑫的 ESP32-S3 相结合,为创客打造了一款一体化工具,具有增强的处理能力和多样化的全新外设。凭借其内置的 Wi-Fi® 和蓝牙®功能,UNO R4 WiFi 使制造商能够探索无限的创意可能性。此外,这款多功能板拥有方便的板载 12x8 LED 矩阵和 Qwiic 连接器。LED 矩阵是完全可编程的,可直接在电路板上制作视觉原型,为创新和释放创造力提供了充足的空间。通过 Qwiic 连接器,用户可以即插即用的方式创建项目。UNO R4 WiFi 为各个级别的创客提供了无与伦比的灵活性和可能性。
二、系统框图
三、Home Assistant系统搭建
在HomeAssistant官网上下载VMWare版本的HAOS虚拟机,然后一路安装即可。
看到上述界面后,可以通过浏览器进入HA里面:
配置MQTT服务器:
添加MQTT客户端:
注册设备:https://www.home-assistant.io/integrations/sensor/
手势传感器:
homeassistant/sensor/APDS9960_GestureSensor/config
{
"device_class":"frequency",
"name":"GestureSensor",
"state_topic":"homeassistant/APDS9960/state",
"unit_of_measurement":"Lux",
"value_template":"{{ value_json.GestureSensor}}",
"unique_id":"GestureSensor_APDS9960",
"device":{
"identifiers":[
"APDS9960"
],
"name":"APDS9960-Adafruit"
}
}
homeassistant/sensor/APDS9960_Light/config
然后发送:
{
"device_class":"illuminance",
"name":"Light",
"state_topic":"homeassistant/APDS9960/state",
"unit_of_measurement":"Lux",
"value_template":"{{ value_json.Light}}",
"unique_id":"Light_APDS9960",
"device":{
"identifiers":[
"APDS9960"
],
"name":"APDS9960-Adafruit"
}
}
注册完设备后,在HA里面可以看到四个传感器:(下图中的数据是随机模拟值,后续会替代为真实传感器数据)
四、传感器数据采集
开发环境选择的是Arduino,首先安装驱动库。
首先进行APDS9960的初始化:
Serial.println("Adafruit APDS9960 Init");
if (!apds.begin(10, APDS9960_AGAIN_4X, 0x39, &Wire1)) {
Serial.println("Error initializing APDS-9960 sensor.");
}else{
Serial.println("Successfully initializing APDS-9960 sensor.");
}
//gesture mode will be entered once proximity mode senses something close
apds.enableProximity(true);
//apds.enableGesture(true);
//enable color sensign mode
apds.enableColor(true);
Serial.println("Sensor Enabled.");
接下来尝试分别获取颜色传感器数据:
void My_Read_APDS9960_Sensor(void) {
Serial.println("Begin Read Color Data");
//wait for color data to be ready
while (!apds.colorDataReady()) {
delay(5);
}
Serial.println("Read Color Data done");
//get the data and print the different channels
apds.getColorData(&r, &g, &b, &c);
Serial.print("red: ");
Serial.print(r);
Serial.print(" green: ");
Serial.print(g);
Serial.print(" blue: ");
Serial.print(b);
Serial.print(" clear: ");
Serial.println(c);
Serial.println();
delay(500);
sprintf(rgbStr, "r:%d g:%d b:%d", r, g, b);
ambientLux = apds.calculateLux(r, g, b);
Serial.print("Ambient Lux = ");
Serial.println(ambientLux);
}
五、发布数据到Home Assistant
发送传感器数据到HA,通过MQTT发布的方式。
// send message, the Print interface can be used to set the message contents
mqttClient.beginMessage(topic);
mqttClient.print(", \"Light\": ");
mqttClient.print(ambientLux);
mqttClient.print(", \"RGB\": ");
mqttClient.print(r);
mqttClient.print("}");
mqttClient.endMessage();
进入到HA,需要从浏览器里面输入:http://192.168.0.101:8123/
之后就可以在Overview里面看到前面创建的几个设备。
六、心得体验
通过本次项目,熟悉了HA搭建流程,传感器APDS9960颜色传感器使用方法,并且利用MQTT把数据发布到智能云端HOME ASSISTANT平台!
后续期待能够把手势传感器与距离传感器一起使用。开发更加有趣的内容!