阿里云
1024开发者盛宴之Java专家问答专场
发表主题 回复主题
  • 4166阅读
  • 1回复

[技术交流]谷歌Android things接入阿里云IoT物联网套件

级别: 管理员
发帖
132
云币
237

谷歌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工程,添加网络权限
  1. <uses-permission android:name="android.permission.INTERNET" />


b) gradle引入eclipse.paho.mqtt
  1. implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
c) 通过I2C读取DHT12数据
  1. private void readDataFromI2C() {
  2.         try {
  3.             byte[] data = new byte[5];
  4.             i2cDevice.readRegBuffer(0x00, data, data.length);
  5.             // check data
  6.             if ((data[0] + data[1] + data[2] + data[3]) % 256 != data[4]) {
  7.                 humidity = temperature = 0;
  8.                 return;
  9.             }
  10.             // humidity data
  11.             humidity = Double.valueOf(String.valueOf(data[0]) + "." + String.valueOf(data[1]));
  12.             Log.d(TAG, "humidity: " + humidity);
  13.             // temperature data
  14.             if (data[3] < 128) {
  15.                 temperature = Double.valueOf(String.valueOf(data[2]) + "." + String.valueOf(data[3]));
  16.             } else {
  17.                 temperature = Double.valueOf("-" + String.valueOf(data[2]) + "." + String.valueOf(data[3] - 128));
  18.             }
  19.             Log.d(TAG, "temperature: " + temperature);
  20.         } catch (IOException e) {
  21.             Log.e(TAG, "readDataFromI2C error " + e.getMessage(), e);
  22.         }
  23.     }
d) 通过UART获取Ze08CH2O数据
  1. try {
  2.                 // data buffer
  3.                 byte[] buffer = new byte[9];
  4.                 while (uartDevice.read(buffer, buffer.length) > 0) {
  5.                     if (checkSum(buffer)) {
  6.                         ppbCh2o = buffer[4] * 256 + buffer[5];
  7.                         ch2o = ppbCh2o / 66.64 * 0.08;
  8.                     } else {
  9.                         ch2o = ppbCh2o = 0;
  10.                     }
  11.                     Log.d(TAG, "ch2o: " + ch2o);
  12.                 }
  13.             } catch (IOException e) {
  14.                 Log.e(TAG, "Ze08CH2O read data error " + e.getMessage(), e);
  15.             }
e) 创建阿里云IoT连接,上报数据
  1. /*
  2. payload格式
  3. {
  4.   "id": 123243,
  5.   "params": {
  6.     "temperature": 25.6,
  7.     "humidity": 60.3,
  8.     "ch2o": 0.048
  9.   },
  10.   "method": "thing.event.property.post"
  11. }
  12. */
  13. MqttMessage message = new MqttMessage(payload.getBytes("utf-8"));
  14. message.setQos(1);
  15. String pubTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
  16. mqttClient.publish(pubTopic, message);



2.4 云端控制台实时数据


设备启动后,可以在阿里云IoT云端控制台,设备管理->运行状态 查看设备当前的实时数据


3. 源代码


GitHub 传送门:  https://github.com/iot-blog/aliyun-iot-android-things-nxp



级别: 程序猿
发帖
481
云币
726
只看该作者 沙发  发表于: 08-27
学习了!
 
[ 此帖被服务器云在2018-11-09 22:16重新编辑 ]
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个