1. 案例簡介
阿裡在雲栖大會上釋出第一款機器人“小蠻驢”,瞬間激起千層浪。
無人車,智能物流,機器人等一些概念又火熱了一把。
借“小蠻驢”的東風以及火熱的HaaS,我們推出了更加親民的“小小蠻驢”,豐富HaaS的場景打造,吸引更多的開發者和企業來加入HaaS的生态建設。

2. 基礎知識
2.1 HaaS100開發闆
HaaS100 是一款物聯網場景中的标準開發闆,并配套嵌入到硬體中的軟體驅動及功能子產品,為使用者提供物聯網裝置高效開發服務。
HaaS100核心闆有着豐富的外設接口,如下所示:
詳細的資料參考
HaaS 100 硬體規格。
2.2 驅動電機
驅動電機晶片是小車最重要的子產品之一,2A的強大輸出電流為小車提供滿滿的動力。
在驅動子產品接口的定義中包括:
IN1和IN2是控制小車的左電機,IN3和IN4是控制小車的右電機,ENA和ENB引腳為輸出使能管腳,高電平有效,IN1、IN2、IN3和IN4可以通過PWM脈沖調速。
電機控制:
IN1高電平,IN2低電平,左電機正傳;
IN1低電平,IN2高電平,左電機反傳;
IN3高電平,IN4低電平,右電機正傳;
IN3低電平,IN4高電平,右電機反傳。
2.3 超音波測距子產品
超音波測距一般有4個管腳:
GND:接公共地
VCC:供5V電源
Trigger:觸發控制,信号輸入引腳
Echo:回響信号輸出引腳
超音波測距原理是當發送的超音波遇到物體被發射回來,被接收端接收,然後通過發送信号到接收到回響的信号時間間隔可以測算出距離。
測距過程如下:HaaS100給Trigger引腳至少10uS的脈沖觸發信号,這時候超音波子產品發射8個40KHz的方波,然後子產品自動檢測是否有信号傳回。若檢測到回響信号,會通過Echo引腳輸出一個高電平脈沖,脈沖的寬度就是超音波從發射到傳回的時間t。假設小車距離障礙物距離L,2L=vt,L=vt/2,其中v聲音的傳播速度340m/s。
2.4 紅外避障子產品
紅外避障原理就是當障礙物靠近的時候,紅外接收到的發射光強度越來越大,是以增大了輸出的模拟信号,模拟信号接入比較器,經過比較器處理,輸出數字信号。讀取數字信号電平,就可以判斷前方是否有障礙物。
2.5 測速子產品
測速子產品主要原理是由碼盤結合光電傳感器,傳感器一端為發射光,另一端接收光,通過測量機關時間内脈沖個數得出小車的速度,本子產品采用施密特觸發器輸出的信号非常穩定( 去抖)。
3. 物料清單
智能車底闆電路
- 紅外接收頭子,實作紅外遙控小車
- 5V電源穩壓晶片
- 電機驅動晶片,電流可達2A,為小車提供強大的動力
- 電源訓示燈
- 保護二極管
其他豐富接口
- 電機接口
- 超音波子產品接口
- 舵機子產品接口
- 測速子產品接口
- 紅外避障子產品接口
- 電池座接口
-
HaaS連接配接接口
| 物料 | 規格 | 購買連結 |
| :—: | :—: | :—: |
| HaaS100開發闆 |
| 阿裡雲
天貓連結|
| 智能車套件 | 提供完整一套小車配件,結合HaaS100,可以實作雲端釘控制 | 微雪
微雪連結
4. 案例實作
本案例實作了小車模型中的電機控制部分,其他子產品部分開發者可以自己研究摸索。
4.1 硬體連接配接
驅動電機接口 | HaaS100 | I/O模式 |
---|---|---|
IN1 | GPIO47 | O |
IN2 | GPIO40 | |
ENA | GPIO24 | |
IN3 | GPIO26 | |
IN4 | GPIO46 | |
ENB | GPIO25 |
4.2 軟體設計
4.2.1 雲端建立産品
參考
《一步步打造能手機遠端管理的HaaS花卉養植系統》等系列文章,一步步在物聯網平台建立産品、對應的物模型以及裝置。也可以通過載入
TSL檔案,一鍵生成物模型。
建立了HaaS電動車的産品名稱,然後定義了前進、後退、暫停、左轉、右轉等物模型屬性。
按照一步步操作,雲端建立産品、物模型以及裝置以後,我們可以擷取對應的三元組資訊。
4.2.2 裝置端代碼
1、 配置初始化
HaaS100裝置端電動小車參考代碼的路徑在:/solution/auto_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) {
aos_msleep(1000);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
2、對驅動電機晶片控制引腳配置
參考代碼的路徑在:/solution/auto_demo/auto_drv.c下
int auto_gpio_init(void)
int ret = 0;
temp_gpio.port = IN1_PIN;
temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
hal_gpio_init(&temp_gpio);
temp_gpio.port = IN2_PIN;
temp_gpio.port = IN3_PIN;
temp_gpio.port = IN4_PIN;
temp_gpio.port = ENA_PIN;
temp_gpio.port = ENB_PIN;
//gpio open
fd = open("/dev/gpio", 0);
printf("open gpio %s, fd:%d\r\n", fd >= 0 ? "success" : "fail", fd);
GPIO_Set(ENA_PORT,1);
GPIO_Set(ENB_PORT,1);
stop_ctl();
aos_cli_register_command(&haas_cmd);
return ret;
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
3、接收雲端控制指令
接受處理雲端的控制指令,包括後退、左轉、右轉、停止、前進等。
參考代碼的路徑在:/solution/auto_demo/data_model_basic_demo.c下
static void demo_dm_recv_handler(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata)
uint8_t i;
printf("demo_dm_recv_handler, type = %d\r\n", recv->type);
switch (recv->type) {
/* 雲端下發的屬性設定 */
case AIOT_DMRECV_PROPERTY_SET: {
printf("msg_id = %ld, params = %.*s\r\n",
(unsigned long)recv->data.property_set.msg_id,
recv->data.property_set.params_len,
recv->data.property_set.params);
char *auto_temp[5]={"back","left","right","stop","front"};
cJSON *root = cJSON_Parse(recv->data.property_set.params);
for(i = 0 ;i<5 ;i++){
cJSON *value = cJSON_GetObjectItem(root,auto_temp[i]);
if (value != NULL && cJSON_IsNumber(value)) {
printf("%s is find!\r\n",auto_temp[i]);
break;
}
}
switch(i){
case 0:
back_ctl(); //後退
printf("---back\r\n");
break;
case 1:
left_ctl(); //左轉
printf("---left\r\n");
case 2:
right_ctl(); //右轉
printf("---right\r\n");
case 3:
stop_ctl(); //停止
printf("---stop\r\n");
case 4:
front_ctl(); //前進
printf("---front\r\n");
default:
break;
}
break;
....
default:
break;
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
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
│ └─ HaasCar (示例1 HaaS小小蠻驢)
│ ├─ HaasCar.axml (頁面布局檔案)
│ ├─ HaasCar.js (控制邏輯,使用者在這裡定義互動行為)
│ ├─ HaasCar.acss (頁面樣式)
│ ├─ HaasCar.json (頁面配置,用于配置頁面标題等)
│ └─ HaasCar.TSL.json (示例對應的TSL檔案,使用者可以在物聯網平台上導入該檔案生成物模型)
│ └─ HaasFlower (示例2 HaaS養花,目錄結構同 HaasCar)
├─ 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 ->',
// HaasCar.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 代碼編譯、燒錄
編譯auto_demo的過程如下:
– 編譯固件可參考
《aos-studio使用說明之編譯固件》– 燒錄固件可參考
《aos-studio使用說明之燒錄固件》4.3.4 運作
運作列印資訊
5. 總結
這麼豐富詳細的操作步驟,開發者朋友是不是也用了1小時就打造出自己的小小蠻驢電動小車了呢_
我相信有上面這麼詳細的一步步說明,大家都自己獨立完成了電動小車的打造,并且實作了雲端釘控制。大家以此為出發點,挖掘越多有意思的智能硬體,通過借助HaaS這樣豐富的生态,讓很多不智能的裝置也很容易的智能化起來。
開發者支援
HaaS官方:
https://haas.iot.aliyun.com/HaaS技術社群:
https://blog.csdn.net/HaaSTech開發者釘釘群和公衆号見下圖,開發者釘釘群每天都有技術支援同學值班。