前言
2020年云棲大會上,阿里云發布了一款機器人“小蠻驢”,瞬間激起千層浪,無人車,智能物流,機器人等一些概念又火熱了一把,
借“小蠻驢”的東風以及火熱的HaaS,我們推出了更加親民的“小小蠻驢”,豐富HaaS的場景打造,全面開放的云、端、釘示例也能助力開發者學習全鏈路知識,吸引更多的開發者和企業來加入HaaS的生態建設,
1、認識一下小小蠻驢真面目
1.1、組件部分
HaaS100核心板
HaaS100是一款物聯網場景中的標準硬體,并配套嵌入到硬體中的軟體驅動及功能模塊,為用戶提供物聯網設備高效開發服務,
HaaS100核心板有著豐富的外設介面,如下所示:
詳細的資料參考HaaS100 硬體規格,
智能車底板電路
- 紅外接收頭子,實作紅外遙控小車
- 5V電源穩壓芯片
- 電機驅動芯片,電流可達2A,為小車提供強大的動力
- 電源指示燈
- 保護二極管
其他豐富介面
- 電機介面
- 超聲波模塊介面
- 舵機模塊介面
- 測速模塊介面
- 紅外避障模塊介面
- 電池座介面
- HaaS連接介面
1.2、重要模塊介紹
1.2.1、驅動電機
驅動電機芯片是小車最重要的模塊之一,2A的強大輸出電流為小車提供滿滿的動力,
驅動模塊的介面定義
| 介面 | HaaS100 | 模式 |
| IN1 | GPIO47 | O |
| IN2 | GPIO40 | O |
| ENA | GPIO24 | O |
| IN3 | GPIO26 | O |
| IN4 | GPIO46 | O |
| ENB | GPIO25 | O |
其中,IN1和IN2是控制小車的左電機,IN3和IN4是控制小車的右電機,ENA和ENB引腳為輸出使能管腳,高電平有效,IN1、IN2、IN3和IN4可以通過PWM脈沖調速,
電機控制:
IN1高電平,IN2低電平,左電機正傳;
IN1低電平,IN2高電平,左電機反傳;
IN3高電平,IN4低電平,右電機正傳;
IN3低電平,IN4高電平,右電機反傳,
1.2.2、超聲波測距模塊
超聲波測距一般有4個管腳:
GND:接公共地
VCC:供5V電源
Trigger:觸發控制,信號輸入引腳
Echo:回響信號輸出引腳
超聲波測距原理是當發送的超聲波遇到物體被發射回來,被接收端接收,然后通過發送信號到接收到回響的信號時間間隔可以測算出距離,
測距程序如下:HaaS100給Trigger引腳至少10uS的脈沖觸發信號,這時候超聲波模塊發射8個40KHz的方波,然后模塊自動檢測是否有信號回傳,若檢測到回響信號,會通過Echo引腳輸出一個高電平脈沖,脈沖的寬度就是超聲波從發射到回傳的時間t,假設小車距離障礙物距離L,2L=vt,L=vt/2,其中v聲音的傳播速度340m/s,
1.2.3、紅外避障模塊
紅外避障原理就是當障礙物靠近的時候,紅外接收到的發射光強度越來越大,所以增大了輸出的模擬信號,模擬信號接入比較器,經過比較器處理,輸出數字信號,讀取數字信號電平,就可以判斷前方是否有障礙物,
1.2.4、測速模塊
測速模塊主要原理是由碼盤結合光電傳感器,傳感器一端為發射光,另一端接收光,通過測量單位時間內脈沖個數得出小車的速度,本模塊采用施密特觸發器輸出的信號非常穩定( 去抖),
2、云端小小蠻驢產品創建
參考基于《一步步打造能手機遠程管理的HaaS花卉養植系統》系列文章,一步步在物聯網平臺創建產品、對應的物模型以及設備,也可以通過載入TSL檔案,一鍵生成物模型,
2.1、云端產品創建展示
創建了HaaS電動車的產品名稱,然后定義了前進、后退、暫停、左轉、右轉等物模型屬性,
按照一步步操作,云端創建產品、物模型以及設備以后,我們可以獲取對應的四元組資訊,
3、HaaS電動小車軟體開發
3.1、配置初始化
HaaS100設備端電動小車參考代碼的路徑在:/application/example/auto_demo下,
從物聯網云平臺創建的產品時候,可以獲取除錯設備的四元組資訊,如下所示:
//四元組資訊初始化
#define PRODUCT_KEY "*******"
#define PRODUCT_SECRET "*******"
#define DEVICE_NAME "*******"
#define DEVICE_SECRET "*******"
對驅動電機芯片控制引腳配置
int auto_gpio_init(void)
{
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.config = OUTPUT_OPEN_DRAIN_PULL_UP;
hal_gpio_init(&temp_gpio);
temp_gpio.port = IN3_PIN;
temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
hal_gpio_init(&temp_gpio);
temp_gpio.port = IN4_PIN;
temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
hal_gpio_init(&temp_gpio);
temp_gpio.port = ENA_PIN;
temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
hal_gpio_init(&temp_gpio);
temp_gpio.port = ENB_PIN;
temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
hal_gpio_init(&temp_gpio);
GPIO_Set(ENA_PORT,1); //使能驅動電機左
GPIO_Set(ENB_PORT,1);//使能驅動電機右
stop_ctl();
}
3.2、接收云端控制命令
接受處理云端的控制命令,包括后退、左轉、右轉、停止、前進等,
char *auto_temp[5]={"back","left","right","stop","front"};
static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{
int res = 0;
char i =0,*auto_c;
cJSON *root = cJSON_Parse(request)
for(i=0;i<5;i++){
auto_c = auto_temp[i];
cJSON *value = cJSON_GetObjectItem(root,auto_c);
if (value == NULL || !cJSON_IsNumber(value)) {
EXAMPLE_TRACE("not find %d",i);
}
else{
goto hass_send;
}
}
cJSON_Delete(root);
if(i == 5){
EXAMPLE_TRACE("not find %d",i);
return -1;
}
hass_send:
switch(i){
case 0:
back_ctl();
EXAMPLE_TRACE("---back");
break;
case 1:
left_ctl();
EXAMPLE_TRACE("---left");
break;
case 2:
right_ctl();
EXAMPLE_TRACE("---right");
break;
case 3:
stop_ctl();
EXAMPLE_TRACE("---stop");
break;
case 4:
front_ctl();
EXAMPLE_TRACE("---front");
break;
default:
break;
}
res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,
(unsigned char *)request, request_len);
return 0;
}
3.3、HaaS電動車小程式開發
3.3.1、云端釘一體小程式SDK獲取
git clone -b dev_3.1.0_haas https://github.com/alibaba/AliOS-Things.git
SDK相關代碼及操作readme在application/miniapp/目錄下,
3.3.2、SDK目錄結構
/
├─ lib (存放依賴庫的檔案夾,用戶無需關心)
│ ├─ @alicloud/pop-core (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.3.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
這兩個引數在創建設備時生成,
3.3.4、編譯驗證
點擊小程式IDE右上角“真機除錯”按鈕,等待二維碼生成后,使用釘釘APP掃碼,即可發起小程式,
3.4、效果展示
4、開發者技術支持
如需更多技術支持,可加入釘釘開發者群

更多技術與解決方案介紹,請訪問阿里云AIoT首頁https://iot.aliyun.com/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238624.html
標籤:其他
上一篇:鴻蒙驅動框架
