1. 案例簡介
過去,很多人一聽嵌入式~~智能硬件~~就有點頭大,甚至會感到一絲絲的恐懼。其實不然,HaaS積木真的就能讓智能硬件簡單~好玩~普惠。接下來,就以HaaS打造的花卉養植盒子系統為例,指引開發者如何自己一步步簡單快速搭建起屬于自己的好玩智能硬件。
2. 基礎知識
本案例主要依賴的硬件環境有:HaaS100、溫濕度傳感器。
2.1 HaaS100開發板
HaaS100是一款物聯網場景中的標準開發板,并配套嵌入到硬件中的軟件驅動及功能模塊,為用戶提供物聯網設備高效開發服務。
詳細的資料參考HaaS 100 硬件規格。
2.2 溫濕度傳感器
DHT11溫濕度傳感器的工作原理可參考網上文章,比如CSDN上的文章。
3. 物料清單
物料 | 規格 | 購買鏈接 |
HaaS100開發板 | - | 阿里云天貓鏈接 |
DHT11溫濕度傳感器 | 用來采集器空氣中的溫度和濕度,為單總線數據交互模式 | Risym 天貓鏈接 、TELESKY 天貓鏈接 、優信電子 淘寶鏈接 |
4. 案例實現
4.1 硬件連接
HaaS100與溫濕度傳感器和土壤濕度傳感器的接口說明。
HaaS100接口 | 傳感器接口 | 說明 |
GPIO01 | OUT | DHT11溫濕度傳感器 |
GND | GND | 電源地 |
VCC | 3V3 | 3V3電源 |
4.2 軟件設計
4.2.1 云端創建產品
請先點擊登錄物聯網平臺(未注冊阿里云賬戶的用戶,請先完成賬戶注冊),按下面步驟一步步去打造
1、創建項目注冊登入后,如下圖所示,前往管理控制臺。
點擊公共實例,進行產品創建
2、創建HaaS養花的產品點擊創建產品,見下圖所示,這里創建了一個名稱“HaaS養花”產品。
在產品詳情中增加產品的功能,比如:溫度、濕度等。
3、設備管理在設備列表中增加對應產品的設備。
查看設備信息
創建后的設備設備證書(ProductKey、DeviceName、DeviceSecret) 信息需要同步到設備端的開發代碼段中,在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;
}
與物聯網平臺連接需要使用設備證書(ProductKey、DeviceName、DeviceSecret) 信息以及溫濕度上報,參考文檔路徑: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);
}
}
溫濕度檢測上報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);
printf("report:%s\r\n",property_payload);
demo_send_property_post(dm_handle, property_payload);
last_hum = humidity;
}
}
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
// getAccessKey()方法是為了獲取AccessKeyID以及AccessKeySecret,請用安全方法實現
let accessKey = getAccessKey();
// HaasCar.js
// 填入目標設備 DeviceName 以及 ProductKey
let device = getDeviceKey();
代碼中提到的幾個關鍵參數:
AccessKeyID AccessKeySecret
云賬號AccessKey是用戶訪問阿里云API的密鑰。(https://usercenter.console.aliyun.com/#/manage/ak)安全起見,我們可以采取創建RAM子賬號的形式,來對權限進行分離。
阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
請妥善保管好您的AccessKey信息。強烈建議不要將AccessKey ID和AccessKey Secret保存到工程代碼里或者任何容易被泄露的地方,AccessKey泄露會威脅您賬號下所有資源的安全。
創建完成后,需要手動分配權限,點擊右側,添加權限。我這里直接選擇了 AdministratorAccess。 添加完成后如下。
DeviceName ProducKey
這兩個參數在創建設備時生成。
getAccessKey()和getDeviceKey()方法的實現,可以通過從kv中讀取或者從文件中讀取都可以,不建議明文寫在代碼中。
4、 編譯驗證點擊小程序IDE右上角“真機調試”按鈕,等待二維碼生成后,使用釘釘APP掃碼,即可發起小程序。
4.3 開發環境搭建、編譯、燒入、運行
4.3.1 AliOS Things開發環境搭建
開發環境的搭建請參考搭建開發環境,其中詳細的介紹了AliOS Things 3.3的IDE集成開發環境的搭建流程。
4.3.2 智能養花系統代碼下載
智能語音播放器的代碼下載請參考 創建工程,其中,
選擇解決方案:“養花案例”選擇開發板:HaaS100。
4.3.3 代碼編譯、燒錄
編譯flower_demo的過程如下:
-- 編譯固件可參考編譯固件。
-- 燒錄固件可參考燒錄固件。
4.3.4 運行
運行打印信息
5. 總結
至此,一個簡單的智能手機遠程管理的HaaS花卉養植系統就做好了。是不是很簡單?
當然,這個HaaS花卉養植系統的打造僅僅是一個拋磚引玉,還有很大的擴展空間,比如濕度過低觸發自動灑水,溫度過高自動開家里的空調等設備。還有非常大的想象和發揮空間。
同理,做一個HaaS家庭魚缸遠程監測包括喂食等系統,也就很簡單了。
另外,也希望大家能一起攜手來豐富HaaS的應用案例化,打造出更多更有意思的場景,比如:HaaS+人感打造智慧辦公室、HaaS+Mic/Speaker打造和諧校園、HaaS+空凈打造呼吸守護系統等等。