1.硬件清单
设备列表
|
图片
|
备注
|
淘宝链接
|
NXP 7 开发板
|
![]() |
可用树莓派代替
|
2017谷歌开发者大会赠品
|
甲醛
ze08-CH2O
|
![]() |
|
https://item.taobao.com/item.htm?id=528771500519
|
温湿度 DHT12
|
![]() |
|
https://detail.tmall.com/item.htm?id=556508855729
|
2.硬件接线
3.阿里云IoT物联网平台开发
3.1 开通IoT产品
3.2 创建产品
3.3 产品物模型定义
属性名 | 标识符 | 数据类型 | 描述 |
---|---|---|---|
温度 | temperature | float | DHT12传感器采集 |
湿度 | humidity | float | DHT12传感器采集 |
甲醛浓度 | ch2o | double | ZE08传感器采集 |
4.设备端开发
4.1 Android things工程配置
网络访问权限
<uses-permission android:name="android.permission.INTERNET" />
mqtt依赖
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
4.2 传感器数据获取
通过I2C读取DHT12数据(DHT12Thermometer)
private void readDataFromI2C() {
try {
byte[] data = new byte[5];
i2cDevice.readRegBuffer(0x00, data, data.length);
// check data
if ((data[0] + data[1] + data[2] + data[3]) % 256 != data[4]) {
humidity = temperature = 0;
return;
}
// humidity data
humidity = Double.valueOf(String.valueOf(data[0]) + "." + String.valueOf(data[1]));
Log.d(TAG, "humidity: " + humidity);
// temperature data
if (data[3] < 128) {
temperature = Double.valueOf(String.valueOf(data[2]) + "." + String.valueOf(data[3]));
} else {
temperature = Double.valueOf("-" + String.valueOf(data[2]) + "." + String.valueOf(data[3] - 128));
}
Log.d(TAG, "temperature: " + temperature);
} catch (IOException e) {
Log.e(TAG, "readDataFromI2C error " + e.getMessage(), e);
}
}
通过UART获取ZE08数据(Ze08CH2O)
try {
// data buffer
byte[] buffer = new byte[9];
while (uartDevice.read(buffer, buffer.length) > 0) {
if (checkSum(buffer)) {
ppbCh2o = buffer[4] * 256 + buffer[5];
ch2o = ppbCh2o / 66.64 * 0.08;
} else {
ch2o = ppbCh2o = 0;
}
Log.d(TAG, "ch2o: " + ch2o);
}
} catch (IOException e) {
Log.e(TAG, "Ze08CH2O read data error " + e.getMessage(), e);
}
4.3 通过MQTT连接阿里云IoT,上报数据
建立Mqtt连接
mqttClient = new MqttAndroidClient(getApplicationContext(),url, clientId, new MemoryPersistence());
MqttConnectOptions connOpts = new MqttConnectOptions();
// MQTT 3.1.1
connOpts.setMqttVersion(4);
connOpts.setAutomaticReconnect(true);
connOpts.setCleanSession(true);
connOpts.setUserName(mqttUsername);
connOpts.setPassword(mqttPassword.toCharArray());
connOpts.setKeepAliveInterval(60);
mqttClient.connect(connOpts);
上报传感器数据
String payload = String.format(payloadJson, String.valueOf(System.currentTimeMillis()), df.format(thermometer.getTemperature()), df.format(thermometer.getHumidity()), df.format(ze08Ch2o.getCh2o()));
MqttMessage message = new MqttMessage(payload.getBytes("utf-8"));
message.setQos(1);
mqttClient.publish(pubTopic, message);
5. 设备运行
6.相关资料
硬件相关
- android things开发板 NXP Pico i.MX7D 完整I/O接口文档