1. 案例簡介
過去,很多人一聽嵌入式~~智能硬體~~就有點頭大,甚至會感到一絲絲的恐懼。
其實不然,HaaS積木真的就能讓智能硬體簡單~好玩~普惠。
接下來,就以HaaS打造的花卉養植盒子系統為例,指引開發者如何自己一步步簡單快速搭建起屬于自己的好玩智能硬體。

2. 基礎知識
本案例主要依賴的硬體環境有:HaaS100、溫濕度傳感器。
2.1 HaaS100開發闆
HaaS100是一款物聯網場景中的标準開發闆,并配套嵌入到硬體中的軟體驅動及功能子產品,為使用者提供物聯網裝置高效開發服務。
HaaS100核心闆有着豐富的外設接口,如下所示:
詳細的資料參考
HaaS 100 硬體規格。
2.2 溫濕度傳感器
DHT11溫濕度傳感器的工作原理
2.2.1 工作時序
主機發開始信号-》DHT11響應輸出-》DHT11資料信号。(平時預設為高電平,起始信号為低電平)
2.2.2 起始信号和響應信号的規則
主機發開始信号:低電平大于18ms,高電平20-40us;
DHT11的響應信号:低電平80us,高電平80us;
2.2.3數字信号的規則
一次完整的資料傳輸為40bit,高位先出。
資料格式:8bit濕度整數資料+8bit濕度小數資料+8bit溫度整數資料+8bit溫度小數資料+8bit校驗和
校驗和資料=“8bit濕度整數資料+8bit濕度小數資料+8bi溫度整數資料+8bit溫度小數資料”所得結果的末8位。
- 1
- 2
- 3
DHT11傳感器如果沒有接收到主機發送開始信号,不會主動進行溫濕度采集。
數字‘0’信号:低電平50us,高電平26-28us
數字‘1’信号:低電平50us,高電平70us
# 3 物料清單 | **物料** | **規格** | **購買連結** | | :---: | :---: | :---: | | HaaS100開發闆 | | 阿裡雲[天貓連結](https://detail.tmall.com/item.htm?spm=a230r.1.14.16.13123b209835rz&id=627354125244&ns=1&abbucket=16) | | 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) |
4. 案例實作
4.1 硬體連接配接
HaaS100與溫濕度傳感器和土壤濕度傳感器的接口說明。
HaaS100接口 | 傳感器接口 | 說明 |
---|---|---|
GPIO01 | OUT | DHT11溫濕度傳感器 |
GND | 電源地 | |
VCC | 3V3 | 3V3電源 |
4.2 軟體設計
4.2.1 雲端建立産品
請先點選登陸
物聯網平台(未注冊阿裡雲賬戶的使用者,請先完成賬戶注冊),按下面步驟一步步去打造
1、建立項目
注冊登入後,如下圖所示,前往管理控制台。
點選公共執行個體,進行産品建立
2、建立HaaS養花的産品
點選建立産品,見下圖所示,這裡建立了一個名稱“HaaS養花”産品。
在産品詳情中增加産品的功能,比如:溫度、濕度等。
3、裝置管理
在裝置清單中增加對應産品的裝置。
檢視裝置資訊
建立後的裝置三元組資訊需要同步到裝置端的開發代碼段中,在3.1章節會介紹。待裝置端開發結束,就可以在物聯網平台中參看裝置線上狀态。
4.2.2 裝置端代碼
傳感器GPIO初始化接口,參考文檔路徑:solutions/flower_demo/flower_app.c
int flower_gpio_init(void)
{
gpio_dev_t temp_gpio;
temp_gpio.port = HAL_IOMUX_PIN_P0_1;
temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
hal_gpio_init(&temp_gpio);
fd = open("/dev/gpio", 0);
printf("open gpio %s, fd:%d\r\n", fd >= 0 ? "success" : "fail", fd);
DHT11_GPIO_Set(1);
DHT11_Reset();
aos_cli_register_command(&temp_cmd);
return 0;
}
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
與物聯網平台連接配接需要使用三元組資訊以及溫濕度上報,參考文檔路徑:solutions/flower_demo/data_model_basic_demo.c
int demo_main(int argc, char *argv[])
int32_t res = STATE_SUCCESS;
void *dm_handle = NULL;
void *mqtt_handle = NULL;
char *url = "iot-as-mqtt.cn-shanghai.aliyuncs.com"; /* 阿裡雲平台上海站點的域名字尾 */
char host[100] = {0}; /* 用這個數組拼接裝置連接配接的雲平台站點全位址, 規則是 ${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com */
uint16_t port = 443; /* 無論裝置是否使用TLS連接配接阿裡雲平台, 目的端口都是443 */
aiot_sysdep_network_cred_t cred; /* 安全憑據結構體, 如果要用TLS, 這個結構體中配置CA憑證等參數 */
/* TODO: 替換為自己裝置的三元組 */
char *product_key = "産品key";
char *device_name = "裝置名";
char *device_secret = "裝置密鑰";
...
/* 主循環進入休眠 */
while (1) {
report_2_cloud(dm_handle); //每隔3s檢測是否有溫濕度變化檢測
aos_msleep(3000);
}
- 17
- 18
- 19
- 20
- 21
- 22
- 23
溫濕度檢測上報report_2_cloud(),參考文檔路徑:solutions/flower_demo/flower_app.c
void report_2_cloud(void *dm_handle)
uint8_t temp =0,humidity=0,d_flag = 0;
char property_payload[30] = {0};
if(mqtt_status == 0){
printf("mqtt status :%d %p\r\n",mqtt_status,dm_handle);
return;
d_flag = DHT11_Read_Data(&temp,&humidity);
printf("temp ->%d humidity->%d --%d\n",temp,humidity,d_flag);
if((last_temp != temp)&&(!d_flag)){
//溫度變化上報接口
snprintf(property_payload, sizeof(property_payload), "{\"Temperature\": %d}", temp);
printf("report:%s\r\n",property_payload);
demo_send_property_post(dm_handle, property_payload);
last_temp = temp;
if((last_hum != humidity)&&(!d_flag)){
//濕度變化上報接口
snprintf(property_payload, sizeof(property_payload), "{\"Humidity\": %d}", humidity);
last_hum = humidity;
}
- 24
- 25
- 26
- 27
- 28
4.2.3 小程式開發1、 雲端釘一體小程式SDK擷取
git clone -b dev_3.1.0_haas https://github.com/alibaba/AliOS-Things.git
SDK相關代碼及操作readme在application/miniapp/目錄下。
2、 SDK目錄結構
.
├─ lib (存放依賴庫的檔案夾,使用者無需關心)
│ ├─ @alicloud/pop-core ([https://github.com/aliyun/openapi-core-nodejs-sdk](https://github.com/aliyun/openapi-core-nodejs-sdk))
│ ├─ kitx
│ └─ iot-packet.js (封裝給使用者的檔案)
├─ pages (頁面檔案夾,使用者在這裡自定義頁面,示例持續更新中)
│ └─ index (首頁 選擇進入不同示例)
│ ├─ index.axml
│ ├─ index.js
│ ├─ index.acss
│ └─ index.json
│ └─ HaasFlower (示例1 HaaS養花)
│ ├─ HaasFlower.axml (頁面布局檔案)
│ ├─ HaasFlower.js (控制邏輯,使用者在這裡定義互動行為)
│ ├─ HaasFlower.acss (頁面樣式)
│ ├─ HaasFlower.json (頁面配置,用于配置頁面标題等)
│ └─ HaasFlower.TSL.json(示例對應的TSL檔案,可以在物聯網平台上導入該檔案生成物模型)
│ └─ HaasCar (示例2 HaaS小小蠻驢,目錄結構同 HaasFlower)
├─ app.js (注冊小程式,在這裡進行全局參數配置,如 AccessKey)
├─ app.acss (小程式全局樣式)
├─ app.json (小程式全局配置,可以在這裡設定小程式打開的預設頁面)
└─ others
3、 SDK使用
使用小程式開發工具打開miniapp這個工程。
- step1 在app.js填寫 AccessKeyID 以及 AccessKeySecret , 擷取雲端API調用權限
- step2 填寫目标裝置 DeviceName 以及 ProductKey,這裡是待控制的裝置
// app.js
let accessKey = {
accessKeyId: '<- accessKeyId ->', // 填入阿裡雲平台生成的 assessKeyId 以及 Secret
accessKeySecret: '<- accessKeySecret ->',
// HaasFlower.js
let device = {
DeviceName: '<- DeviceName ->', // 填入目标裝置 DeviceName 以及 ProductKey
ProductKey: '<- ProductKey ->'
代碼中提到的幾個關鍵參數:
- AccessKeyID AccessKeySecret
雲賬号AccessKey是使用者通路阿裡雲API的密鑰。(
https://usercenter.console.aliyun.com/#/manage/ak)
安全起見,我們可以采取建立
RAM子賬号的形式,來對權限進行分離。
建立完成後,需要手動配置設定權限,點選右側,添權重限。我這裡直接選擇了 **AdministratorAccess。 **添加完成後如下。
- DeviceName ProducKey
這兩個參數在
建立裝置時生成。
4、 編譯驗證
點選小程式IDE右上角“真機調試”按鈕,等待二維碼生成後,使用釘釘APP掃碼,即可發起小程式。
4.3 開發環境搭建、編譯、燒入、運作
4.3.1 AliOS Things開發環境搭建
開發環境的搭建請參考
《aos-studio使用說明之搭建開發環境》,其中詳細的介紹了AliOS Things 3.3的IDE內建開發環境的搭建流程。
4.3.2 智能養花系統代碼下載下傳
智能語音播放器的代碼下載下傳請參考
《aos-studio使用說明之建立工程》,其中,
選擇解決方案: “養花案例”
選擇開發闆: HaaS100
4.3.3 代碼編譯、燒錄
編譯flower_demo的過程如下:
– 編譯固件可參考
《aos-studio使用說明之編譯固件》– 燒錄固件可參考
《aos-studio使用說明之燒錄固件》4.3.4 運作
運作列印資訊
5. 總結
至此,一個簡單的能手機遠端管理的HaaS花卉養植系統就做好了。是不是很簡單?
當然,這個HaaS花卉養植系統的打造僅僅是一個抛磚引玉,還有很大的擴充空間,比如 濕度過低觸發自動灑水,溫度過高自動開家裡的空調等裝置。還有非常大的想象和發揮空間。
同理,做一個 HaaS家庭魚缸 遠端監測包括喂食 等系統,也就很簡單了。
另外,也希望大家能一起攜手來豐富Haas的應用案例化,打造出更多更有意思的場景,比如:HaaS+人感打造智慧辦公室、HaaS+Mic/Speaker打造和諧校園、HaaS+空淨打造呼吸守護系統等等。
開發者支援
HaaS官方:
https://haas.iot.aliyun.com/HaaS技術社群:
https://blog.csdn.net/HaaSTech開發者釘釘群和公衆号見下圖,開發者釘釘群每天都有技術支援同學值班。
</div><div data-report-view="{"mod":"1585297308_001","dest":"https://blog.csdn.net/HaaSTech/article/details/116233794","extend1":"pc","ab":"new"}"><div></div></div>
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-d7a94ec6ab.css" rel="stylesheet">
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-49037e4d27.css" rel="stylesheet">
</div>