• Home
  • Annotate
  • current directory
Name Date Size #Lines LOC

..29-Oct-2021-

.gitignore A D29-Oct-2021145 1815

Makefile A D29-Oct-2021885 3827

README.md A D29-Oct-202115.3 KiB342257

SConscript A D29-Oct-202145 32

SConstruct A D29-Oct-2021256 114

data_model_basic_demo.c A D29-Oct-202116 KiB433238

flower_app.c A D29-Oct-20215.3 KiB247204

flower_app.h A D29-Oct-2021183 135

main.c A D29-Oct-20211.3 KiB6239

maintask.c A D29-Oct-20211.2 KiB5731

package.yaml A D29-Oct-20211 KiB4034

README.md

1@page flower_demo 智能养花:用钉钉小程序通过HaaS100监测空气温湿度示例
2
3[更正文档](https://gitee.com/alios-things/flower_demo/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html)
4
5# 1. 案例简介
6过去,很多人一听嵌入式~~智能硬件~~就有点头大,甚至会感到一丝丝的恐惧。
7其实不然,HaaS积木真的就能让智能硬件简单~好玩~普惠。
8接下来,就以HaaS打造的花卉养植盒子系统为例,指引开发者如何自己一步步简单快速搭建起属于自己的好玩智能硬件。
9
10<div align=left display=flex>
11    <img src="https://img.alicdn.com/imgextra/i2/O1CN01uTFPGy1WVEslbcHQ6_!!6000000002793-1-tps-1440-1080.gif" style="max-width:800px;" />
12</div>
13
14# 2. 基础知识
15本案例主要依赖的硬件环境有:HaaS100、温湿度传感器。
16## 2.1  HaaS100开发板
17**HaaS100**是一款物联网场景中的标准开发板,并配套嵌入到硬件中的软件驱动及功能模块,为用户提供物联网设备高效开发服务。
18
19<div align=left display=flex>
20    <img src="https://img.alicdn.com/imgextra/i4/O1CN011t59YF25YubwEfz98_!!6000000007539-2-tps-443-443.png" style="max-width:800px;" />
21</div>
22HaaS100核心板有着丰富的外设接口,如下所示:
23
24<div align=left display=flex>
25    <img src="https://img.alicdn.com/imgextra/i2/O1CN015hi7UZ1WC0FTTOZBs_!!6000000002751-2-tps-586-886.png" style="max-width:800px;" />
26</div>
27
28详细的资料参考[HaaS 100 硬件规格](https://help.aliyun.com/document_detail/184186.html?spm=a2c4g.11186623.6.645.718015814zDYZt)29## 2.2  温湿度传感器
30
31<div align=left display=flex>
32    <img src="https://img.alicdn.com/imgextra/i1/O1CN01G4JbCl1qcplUe5ynk_!!6000000005517-2-tps-1604-872.png" style="max-width:800px;" />
33</div>
34
35DHT11温湿度传感器的工作原理
36### 2.2.1 工作时序
37主机发开始信号-》DHT11响应输出-》DHT11数据信号。(平时默认为高电平,起始信号为低电平)
38
39<div align=left display=flex>
40    <img src="https://img.alicdn.com/imgextra/i3/O1CN017lZ9eZ1cIlnMoyjU3_!!6000000003578-2-tps-1398-352.png" style="max-width:800px;" />
41</div>
42
43### 2.2.2 起始信号和响应信号的规则
44主机发开始信号:低电平大于18ms,高电平20-40us;
45DHT11的响应信号:低电平80us,高电平80us;
46
47<div align=left display=flex>
48    <img src="https://img.alicdn.com/imgextra/i3/O1CN01etKzgU1UNKoYVqtxo_!!6000000002505-2-tps-1592-508.png" style="max-width:800px;" />
49</div>
50
51### 2.2.3 数字信号的规则
52
53一次完整的数据传输为40bit,高位先出。
54数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和
55校验和数据=“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
56
57DHT11传感器如果没有接收到主机发送开始信号,不会主动进行温湿度采集。
58数字‘0’信号:低电平50us,高电平26-28us
59
60<div align=left display=flex>
61    <img src="https://img.alicdn.com/imgextra/i1/O1CN01BVYeO41aQtaXWn8Di_!!6000000003325-2-tps-1564-850.png" style="max-width:800px;" />
62</div>
63
64数字‘1’信号:低电平50us,高电平70us
65
66<div align=left display=flex>
67    <img src="https://img.alicdn.com/imgextra/i2/O1CN01jH1ELf1Z8Hspm5NNC_!!6000000003149-2-tps-1574-730.png" style="max-width:800px;" />
68</div>
69
70# 3. 物料清单
71
72| **物料** | **规格** | **购买链接** |
73| :---: | :---: | :---: |
74| HaaS100开发板 | - | 阿里云[天猫链接](https://detail.tmall.com/item.htm?spm=a230r.1.14.16.13123b209835rz&id=627354125244&ns=1&abbucket=16) |
75| DHT11温湿度传感器 | 用来采集器空气中的温度和湿度,为单总线数据交互模式 |  Risym [天猫链接](https://detail.tmall.com/item.htm?id=15598344236&ali_refid=a3_430582_1006:1104520036:N:TAiHo9GD8eTurMzH21/csQ==:fc360fe0aaa2a823247db3c6a3bd21fc&ali_trackid=1_fc360fe0aaa2a823247db3c6a3bd21fc&spm=a230r.1.14.1)、TELESKY [天猫链接](https://detail.tmall.com/item.htm?id=41248630584&ali_refid=a3_430582_1006:1109983619:N:77RKeLgkEXuYPsQPL/pGPA==:31c58e63c712d4a9ee33af685ecb1c61&ali_trackid=1_31c58e63c712d4a9ee33af685ecb1c61&spm=a230r.1.14.6) 、优信电子 [淘宝链接](https://item.taobao.com/item.htm?spm=a230r.1.14.15.77176c121VUnMs&id=522553143872&ns=1&abbucket=12#detail) |
76
77
78<div align=left display=flex>
79    <img src="https://img.alicdn.com/imgextra/i4/O1CN01OkWDVc1Y6AQtrBbaQ_!!6000000003009-2-tps-1488-1234.png" style="max-width:800px;" />
80</div>
81
82# 4. 案例实现
83## 4.1 硬件连接
84HaaS100与温湿度传感器和土壤湿度传感器的接口说明。
85
86| **HaaS100接口** | **传感器接口** | **说明** |
87| :---: | :---: | :---: |
88| GPIO01 | OUT | DHT11温湿度传感器 |
89| GND | GND | 电源地 |
90| VCC | 3V3 | 3V3电源 |
91
92## 4.2 软件设计
93### 4.2.1 云端创建产品
94请先点击登陆[物联网平台](https://www.aliyun.com/product/iot/iot_instc_public_cn)(未注册阿里云账户的用户,请先完成账户注册),按下面步骤一步步去打造
95
961、创建项目
97注册登入后,如下图所示,前往管理控制台。
98
99<div align=left display=flex>
100    <img src="https://img.alicdn.com/imgextra/i3/O1CN01u0AGpn1uEnRRq2WAu_!!6000000006006-2-tps-1308-490.png" style="max-width:800px;" />
101</div>
102
103点击公共实例,进行产品创建
104
105<div align=left display=flex>
106    <img src="https://img.alicdn.com/imgextra/i2/O1CN01kDopR91FsHL3jRQOT_!!6000000000542-2-tps-1328-792.png" style="max-width:800px;" />
107</div>
108
1092、创建HaaS养花的产品
110点击创建产品,见下图所示,这里创建了一个名称“HaaS养花”产品。
111
112<div align=left display=flex>
113    <img src="https://img.alicdn.com/imgextra/i1/O1CN01PtUXOV1K3VVdbJc2v_!!6000000001108-2-tps-1490-600.png" style="max-width:800px;" />
114</div>
115
116在产品详情中增加产品的功能,比如:温度、湿度等。
117
118<div align=left display=flex>
119    <img src="https://img.alicdn.com/imgextra/i3/O1CN01eb1RVm1XpDmMr8cqi_!!6000000002972-2-tps-2538-900.png" style="max-width:800px;" />
120</div>
121
1223、设备管理
123在设备列表中增加对应产品的设备。
124
125<div align=left display=flex>
126    <img src="https://img.alicdn.com/imgextra/i4/O1CN015JH11p1cgaO8xzhJ9_!!6000000003630-2-tps-1910-874.png" style="max-width:800px;" />
127</div>
128
129查看设备信息
130
131<div align=left display=flex>
132    <img src="https://img.alicdn.com/imgextra/i1/O1CN012ZcVF71EK6ADdOaxW_!!6000000000332-2-tps-2734-994.png" style="max-width:800px;" />
133</div>
134
135创建后的设备三元组信息需要同步到设备端的开发代码段中,在3.1章节会介绍。待设备端开发结束,就可以在物联网平台中参看设备在线状态。
136### 4.2.2 设备端代码
137传感器GPIO初始化接口,参考文档路径:solutions/flower_demo/flower_app.c
138```c
139int flower_gpio_init(void)
140{
141    gpio_dev_t temp_gpio;
142
143    temp_gpio.port = HAL_IOMUX_PIN_P0_1;
144    temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
145    hal_gpio_init(&temp_gpio);
146
147    fd = open("/dev/gpio", 0);
148    printf("open gpio %s, fd:%d\r\n", fd >= 0 ? "success" : "fail", fd);
149
150    DHT11_GPIO_Set(1);
151    DHT11_Reset();
152    aos_cli_register_command(&temp_cmd);
153    return 0;
154}
155```
156与物联网平台连接需要使用三元组信息以及温湿度上报,参考文档路径:solutions/flower_demo/data_model_basic_demo.c
157```c
158int demo_main(int argc, char *argv[])
159{
160    int32_t     res = STATE_SUCCESS;
161    void       *dm_handle = NULL;
162    void       *mqtt_handle = NULL;
163    char       *url = "iot-as-mqtt.cn-shanghai.aliyuncs.com"; /* 阿里云平台上海站点的域名后缀 */
164    char        host[100] = {0}; /* 用这个数组拼接设备连接的云平台站点全地址, 规则是 ${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com */
165    uint16_t    port = 443;      /* 无论设备是否使用TLS连接阿里云平台, 目的端口都是443 */
166    aiot_sysdep_network_cred_t cred; /* 安全凭据结构体, 如果要用TLS, 这个结构体中配置CA证书等参数 */
167
168    /* TODO: 替换为自己设备的三元组 */
169    char *product_key       = "产品key";
170    char *device_name       = "设备名";
171    char *device_secret     = "设备密钥";
172
173    ...
174
175    /* 主循环进入休眠 */
176    while (1) {
177        report_2_cloud(dm_handle); //每隔3s检测是否有温湿度变化检测
178        aos_msleep(3000);
179    }
180}
181```
182温湿度检测上报report_2_cloud(),参考文档路径:solutions/flower_demo/flower_app.c
183```c
184void report_2_cloud(void *dm_handle)
185{
186    uint8_t temp =0,humidity=0,d_flag = 0;
187    char property_payload[30] = {0};
188
189    if(mqtt_status == 0){
190        printf("mqtt status :%d %p\r\n",mqtt_status,dm_handle);
191        return;
192    }
193
194    d_flag = DHT11_Read_Data(&temp,&humidity);
195
196    printf("temp ->%d  humidity->%d --%d\n",temp,humidity,d_flag);
197    if((last_temp != temp)&&(!d_flag)){
198        //温度变化上报接口
199        snprintf(property_payload, sizeof(property_payload), "{\"Temperature\": %d}", temp);
200        printf("report:%s\r\n",property_payload);
201        demo_send_property_post(dm_handle, property_payload);
202        last_temp = temp;
203    }
204    if((last_hum != humidity)&&(!d_flag)){
205        //湿度变化上报接口
206        snprintf(property_payload, sizeof(property_payload), "{\"Humidity\": %d}", humidity);
207        printf("report:%s\r\n",property_payload);
208        demo_send_property_post(dm_handle, property_payload);
209        last_hum = humidity;
210    }
211}
212```
213### 4.2.3 小程序开发
214
2151、 云端钉一体小程序SDK获取
216
217```
218git clone -b dev_3.1.0_haas https://github.com/alibaba/AliOS-Things.git
219```
220SDK相关代码及操作readme在application/miniapp/目录下。
221
2222、 SDK目录结构
223
224```tree
225.
226├─ lib (存放依赖库的文件夹,用户无需关心)
227│    ├─ @alicloud/pop-core     ([https://github.com/aliyun/openapi-core-nodejs-sdk](https://github.com/aliyun/openapi-core-nodejs-sdk)228│    ├─ kitx
229│    └─ iot-packet.js              (封装给用户的文件)
230├─ pages                              (页面文件夹,用户在这里自定义页面,示例持续更新中)
231│    └─ index                        (首页 选择进入不同示例)
232│             ├─ index.axml        
233│             ├─ index.js          
234│             ├─ index.acss
235│             └─ index.json
236│    └─ HaasFlower                    (示例1 HaaS养花)
237│             ├─ HaasFlower.axml    (页面布局文件)
238│             ├─ HaasFlower.js        (控制逻辑,用户在这里定义交互行为)
239│             ├─ HaasFlower.acss    (页面样式)
240│             ├─ HaasFlower.json      (页面配置,用于配置页面标题等)
241│             └─ HaasFlower.TSL.json(示例对应的TSL文件,可以在物联网平台上导入该文件生成物模型)
242│    └─ HaasCar              (示例2 HaaS小小蛮驴,目录结构同 HaasFlower)
243├─ app.js                            (注册小程序,在这里进行全局参数配置,如 AccessKey)
244├─ app.acss                         (小程序全局样式)
245├─ app.json                         (小程序全局配置,可以在这里设置小程序打开的默认页面)
246└─ others
247```
248
2493、 SDK使用
250
251使用小程序开发工具打开miniapp这个工程。
252
253<div align=left display=flex>
254    <img src="https://img.alicdn.com/imgextra/i4/O1CN011gxxpV21LOSUrBJC9_!!6000000006968-2-tps-2144-1236.png" style="max-width:800px;" />
255</div>
256
257- step1 在app.js填写 AccessKeyID 以及 AccessKeySecret , 获取云端API调用权限
258- step2 填写目标设备 DeviceName 以及 ProductKey,这里是待控制的设备
259
260```javascript
261// app.js
262let accessKey = {
263  accessKeyId: '<- accessKeyId ->', 	// 填入阿里云平台生成的 assessKeyId 以及 Secret
264  accessKeySecret: '<- accessKeySecret ->',
265}
266
267// HaasFlower.js
268let device = {
269  DeviceName: '<- DeviceName ->',   // 填入目标设备 DeviceName 以及 ProductKey
270  ProductKey: '<- ProductKey ->'
271}
272```
273
274
275代码中提到的几个关键参数:
276
277- AccessKeyID AccessKeySecret
278
279云账号AccessKey是用户访问阿里云API的密钥。([https://usercenter.console.aliyun.com/#/manage/ak](https://usercenter.console.aliyun.com/#/manage/ak)280安全起见,我们可以采取创建[RAM子账号](https://ram.console.aliyun.com/users)的形式,来对权限进行分离。
281
282<div align=left display=flex>
283    <img src="https://img.alicdn.com/imgextra/i2/O1CN01WSv9th1Rm7OvqTbo9_!!6000000002153-2-tps-3584-732.png" style="max-width:800px;" />
284</div>
285
286创建完成后,需要手动分配权限,点击右侧,添加权限。我这里直接选择了 **AdministratorAccess。 **添加完成后如下。
287
288<div align=left display=flex>
289    <img src="https://img.alicdn.com/imgextra/i4/O1CN01fFjDqn1OaihJrsA4o_!!6000000001722-2-tps-3584-1920.png" style="max-width:800px;" />
290</div>
291
292- DeviceName ProducKey
293
294这两个参数在[创建设备](#jSkOe)时生成。
2954、 编译验证
296点击小程序IDE右上角“真机调试”按钮,等待二维码生成后,使用钉钉APP扫码,即可发起小程序。
297
298<div align=left display=flex>
299    <img src="https://img.alicdn.com/imgextra/i1/O1CN01nYZ1R01FVpveL7bv9_!!6000000000493-2-tps-948-156.png" style="max-width:800px;" />
300</div>
301
302<div align=left display=flex>
303    <img src="https://img.alicdn.com/imgextra/i2/O1CN01ixflz91HMKwrURJ2i_!!6000000000743-1-tps-746-1330.gif" style="max-width:800px;" />
304</div>
305
306## 4.3 开发环境搭建、编译、烧入、运行
307### 4.3.1 AliOS Things开发环境搭建
308开发环境的搭建请参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),其中详细的介绍了AliOS Things 3.3的IDE集成开发环境的搭建流程。
309
310### 4.3.2 智能养花系统代码下载
311智能语音播放器的代码下载请参考 [《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html),其中,
312> 选择解决方案: “养花案例”
313> 选择开发板: HaaS100
314
315### 4.3.3 代码编译、烧录
316编译flower_demo的过程如下:
317
318-- 编译固件可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)319
320-- 烧录固件可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)321
322### 4.3.4 运行
323运行打印信息
324
325<div align=left display=flex>
326    <img src="https://img.alicdn.com/imgextra/i3/O1CN01hpPVq91TUpgUAFEqS_!!6000000002386-2-tps-958-900.png" style="max-width:800px;" />
327</div>
328
329# 5. 总结
330至此,一个简单的智能手机远程管理的HaaS花卉养植系统就做好了。是不是很简单?
331
332
333当然,这个HaaS花卉养植系统的打造仅仅是一个抛砖引玉,还有很大的扩展空间,比如 湿度过低触发自动洒水,温度过高自动开家里的空调等设备。还有非常大的想象和发挥空间。
334
335
336同理,做一个 HaaS家庭鱼缸 远程监测包括喂食 等系统,也就很简单了。
337
338
339另外,也希望大家能一起携手来丰富Haas的应用案例化,打造出更多更有意思的场景,比如:HaaS+人感打造智慧办公室、HaaS+Mic/Speaker打造和谐校园、HaaS+空净打造呼吸守护系统等等。
340
341
342