天天看點

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

1. 案例簡介

阿裡在雲栖大會上釋出第一款機器人“小蠻驢”,瞬間激起千層浪。

無人車,智能物流,機器人等一些概念又火熱了一把。

借“小蠻驢”的東風以及火熱的HaaS,我們推出了更加親民的“小小蠻驢”,豐富HaaS的場景打造,吸引更多的開發者和企業來加入HaaS的生态建設。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

2. 基礎知識

2.1 HaaS100開發闆

HaaS100 是一款物聯網場景中的标準開發闆,并配套嵌入到硬體中的軟體驅動及功能子產品,為使用者提供物聯網裝置高效開發服務。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

HaaS100核心闆有着豐富的外設接口,如下所示:

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

詳細的資料參考

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 超音波測距子產品

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

超音波測距一般有4個管腳:

GND:接公共地

VCC:供5V電源

Trigger:觸發控制,信号輸入引腳

Echo:回響信号輸出引腳

超音波測距原理是當發送的超音波遇到物體被發射回來,被接收端接收,然後通過發送信号到接收到回響的信号時間間隔可以測算出距離。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

測距過程如下:HaaS100給Trigger引腳至少10uS的脈沖觸發信号,這時候超音波子產品發射8個40KHz的方波,然後子產品自動檢測是否有信号傳回。若檢測到回響信号,會通過Echo引腳輸出一個高電平脈沖,脈沖的寬度就是超音波從發射到傳回的時間t。假設小車距離障礙物距離L,2L=vt,L=vt/2,其中v聲音的傳播速度340m/s。

2.4 紅外避障子產品

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

紅外避障原理就是當障礙物靠近的時候,紅外接收到的發射光強度越來越大,是以增大了輸出的模拟信号,模拟信号接入比較器,經過比較器處理,輸出數字信号。讀取數字信号電平,就可以判斷前方是否有障礙物。

2.5 測速子產品

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

測速子產品主要原理是由碼盤結合光電傳感器,傳感器一端為發射光,另一端接收光,通過測量機關時間内脈沖個數得出小車的速度,本子產品采用施密特觸發器輸出的信号非常穩定( 去抖)。

3. 物料清單

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

智能車底闆電路

  • 紅外接收頭子,實作紅外遙控小車
  • 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電動車的産品名稱,然後定義了前進、後退、暫停、左轉、右轉等物模型屬性。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

按照一步步操作,雲端建立産品、物模型以及裝置以後,我們可以擷取對應的三元組資訊。

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這個工程。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援
  • 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子賬号

的形式,來對權限進行分離。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

建立完成後,需要手動配置設定權限,點選右側,添權重限。我這裡直接選擇了 **AdministratorAccess。 **添加完成後如下。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援
  • DeviceName ProducKey

這兩個參數在

建立裝置

時生成。

4、 編譯驗證

點選小程式IDE右上角“真機調試”按鈕,等待二維碼生成後,使用釘釘APP掃碼,即可發起小程式。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援
1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

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 運作

運作列印資訊

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援

5. 總結

這麼豐富詳細的操作步驟,開發者朋友是不是也用了1小時就打造出自己的小小蠻驢電動小車了呢_

我相信有上面這麼詳細的一步步說明,大家都自己獨立完成了電動小車的打造,并且實作了雲端釘控制。大家以此為出發點,挖掘越多有意思的智能硬體,通過借助HaaS這樣豐富的生态,讓很多不智能的裝置也很容易的智能化起來。

開發者支援

HaaS官方:

https://haas.iot.aliyun.com/

HaaS技術社群:

https://blog.csdn.net/HaaSTech

開發者釘釘群和公衆号見下圖,開發者釘釘群每天都有技術支援同學值班。

1小時打造HaaS版小小蠻驢智能車1. 案例簡介2. 基礎知識3. 物料清單4. 案例實作5. 總結開發者支援