谷歌Android things物联网硬件接入阿里云IoT物联网套件云端实战
1.硬件设备
1.1 项目设备列表
设备名 |
图片 |
备注 |
购买地址 |
NXP Pico i.MX7D开发板 |
![]() |
Android things系统1.0 |
谷歌开发者大会赠送可以用树莓派替代 |
DHT12温湿度传感器 |
![]() |
I2C数据通信方式 |
淘宝 |
ZE08-CH2O甲醛检测传感器 |
![]() |
UART数据通信方式 |
淘宝 |
1.2 NXP i.MX7D开发板针脚介绍
NXP Pico i.MX7D 完整I/O接口文档

1.3 设备接线示意图

2.阿里云IoT物联网套件
2.1 开通阿里云IoT物联网套件
IoT物联网套件官网地址
2.2 创建高级版产品
添加产品属性定义
属性名 |
标识符 |
数据类型 |
描述 |
温度 |
temperature |
float |
DHT12传感器采集 |
湿度 |
humidity |
float |
DHT12传感器采集 |
甲醛浓度 |
ch2o |
double |
ZE08传感器采集 |

2.3 Android things设备端开发
a) 使用Android Studio创建Android things工程,添加网络权限
复制代码
- <uses-permission android:name="android.permission.INTERNET" />
b) gradle引入eclipse.paho.mqtt
复制代码
- implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
复制代码
- 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);
- }
- }
复制代码
- 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);
- }
复制代码
- /*
- payload格式
- {
- "id": 123243,
- "params": {
- "temperature": 25.6,
- "humidity": 60.3,
- "ch2o": 0.048
- },
- "method": "thing.event.property.post"
- }
- */
- MqttMessage message = new MqttMessage(payload.getBytes("utf-8"));
- message.setQos(1);
- String pubTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
- mqttClient.publish(pubTopic, message);
2.4 云端控制台实时数据
设备启动后,可以在阿里云IoT云端控制台,设备管理->运行状态 查看设备当前的实时数据

3. 源代码
GitHub 传送门: github.com/iot-blog/al…


