去年騰訊為了宣傳自己針對物聯網的開源操作系統TencentOS tiny,舉辦了一場試用活動,當時幸運獲得一塊,但是當時公司任務較重,一直吃灰。
板子實物就這樣,沒啥好介紹的,都是基礎的外設,如今閑來無事,再加上眾多大神完善了git庫,使開發變得容易,所以索性掏出來玩一下。這次主要實現以下幾個功能:在騰訊物聯網平臺創建項目和產品(此處為智能燈)通過平臺控制燈使用騰訊連連微信小程序控制燈
一.上手體驗helloworld騰訊物聯網終端操作系統 TencentOS tiny 簡介騰訊物聯網終端操作系統(TencentOS tiny)是騰訊面向物聯網領域開發的實時操作系統,具有低功耗,低資源占用,模塊化,安全可靠等特點,可有效提升物聯網終端產品開發效率。TencentOS tiny 提供精簡的 RTOS 內核,內核組件可裁剪可配置,可快速移植到多種主流 MCU 及模組芯片上。而且,基于RTOS內核提供了豐富的物聯網組件,內部集成主流物聯網協議棧(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物聯網終端設備及業務快速接入騰訊云物聯網平臺。這是來源于官網的介紹,到底好不好還得看使用,對于我們新手,直接從源碼開始,方便體驗上手:TencentOS_ting源碼倉庫從倉庫拉取下來后文件夾目錄如下:
這里簡單介紹幾個主要的文件夾:board文件夾這個文件夾中包含了目前為止TencentOS tiny 適配的開發板合集,在測試學習的時候非常好用,基本上熱門的開發板均有適配。如果自己適配了新的開發板可以在開發完成后提交合并上去,為后續的開發者提供便利,到手即用。目前已適配很多。
該文件夾為TencentOS tiny支持的通信模組,包括了NB-IOT,wifi,2G,4G,lora。基本滿足開發需求,使用很方便。
components文件夾組件文件夾,包括上云組件,文件系統,安全組件,其中上云組件集合了各種常用的上云方式:
測試第一個代碼:根據自己的開發板在encentOS-tiny\board文件夾下尋找相對應的開發板,我這里選擇TencentOS_tiny_EVB_MX_Plus,進入文件夾,打開KEIL文件,打開hello_world工程。
主函數中初始化了開發板的外設和任務的創建啟動
board_init();初始化了系統的時鐘,UART,定時器和OLED的顯示,所以編譯燒錄后可以在屏幕上顯示相關信息。
hello_world.c文件主要是創建任務,以及任務之間的調用。可以在串口觀察任務運行情況
#define TASK1_STK_SIZE 1024
void task1(void *arg);
osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);
#define TASK2_STK_SIZE 1024
void task2(void *arg);
osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
#define TASK3_STK_SIZE 512
void task3(void *arg);
#endif
void task1(void *arg)
{
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
osThreadId task_dyn_created;
osThreadDynamicDef(task3, osPriorityNormal, 1, TASK3_STK_SIZE);
task_dyn_created = osThreadCreate(osThread(task3), NULL);
int count = 0;
#endif
while (1) {
printf("###I am task1\r\n");
osDelay(2000);
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
if (count++ == 3) {
printf("###I am task1, kill the task3(dynamic created)\r\n");
osThreadTerminate(task_dyn_created);
}
#endif
}
}
void task2(void *arg)
{
while (1) {
#if TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN > 0u
k_err_t rc;
int depth;
rc = tos_task_stack_draught_depth(K_NULL, &depth);
printf("%d %d\n", rc, depth);
#endif
printf("***I am task2\r\n");
osDelay(1000);
}
}
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
void task3(void *arg)
{
while (1) {
printf("$I am task3(dynamic created)\r\n");
osDelay(2000);
}
}
#endif
void application_entry(void *arg)
{
printf("***I am task\r\n");
osThreadCreate(osThread(task1), NULL); // Create task1
osThreadCreate(osThread(task2), NULL); // Create task2
}
二.上云!既然是物聯網操作系統,不聯網那不就是耍流氓嘛!因為是騰訊的物聯網平臺,那么針對自家的平臺適配性肯定是最好的,我們就上騰訊云IoT Explorer平臺。
1.云端配置登錄騰訊云物聯網開發平臺,登陸后點擊立即使用進入產品開發界面。
1.1 新建項目選擇【公共實例】或您購買的【標準企業實例】。
進入項目列表頁面,單擊【新建項目】。項目名稱:輸入“智能燈演示”或其他名稱。項目描述:按照實際需求填寫項目描述。
項目基本信息填寫完成后,單擊【保存】,即可完成新建項目。項目新建成功后,即可新建產品。1.2 產品開發1.2.1 新建產品進入該項目的產品列表頁面,單擊【新建產品】。在新建產品頁面,填寫產品基本信息。
- 產品名稱:輸入“智能燈”或其他產品名稱。
- 產品品類:選擇“智慧城市”>“公共事業”>“路燈照明”。
- 設備類型:選擇“設備”。
- 認證方式:選擇“密鑰認證”。
- 通信方式:這里選擇其他。
- 其他都為默認選項。
1.2.2 完善產品點擊產品名稱進入產品配置頁面在數據模板頁面系統會自動推介了標準功能,如果有需要可自行添加
數據模板是一個 JSON 格式的文件,使用數據模板協議,用戶的設備需按數據模板定義要求傳輸設備數據到云端,并可使用基于數據模板的諸多業務功能,點擊查看json可以看到上面創建功能的json格式:
1.3 創建測試設備完成數據模板后直接進入設備調試,其他的功能暫時用不到。在【設備調試】頁面中,單擊【新建設備】,設備名為 dev001:
三、開發板代碼燒錄TencentOS tiny項目工程中包含了explorer的demo工程,進入該目錄:
這三個數據信息在產品dev001詳情頁中,點擊藍色dev001字樣便可進入:
配置wifi信息
將此處的wifi信息替換為自己的wifi信息,注意:wifi應是2.4G的wifi信號,因為ESP8266不支持5G。編譯下載到開發板。查看設備狀態燒錄完成后保證程序處于運行狀態。進入【控制臺】>【產品開發】>【設備調試】,可查看到設備 “dev001” 的狀態為“上線”狀態,表示 Demo 程序已成功連接上開發平臺。
云端控制設備串口助手可看到設備一直等待平臺的指令下發。
為了方便觀察到設備受控,這里控制開發板上的燈,因為該燈只受高低電平控制,所以無法顯示顏色,亮度的受控結果,這里會使用OLED來替代。在gpio.c中先初始化PB9
在data_template_sample.c中添加控制代碼:
void deal_down_stream_user_logic(void *client, ProductDataDefine * pData)
{
Log_d("someting about your own product logic wait to be done");
/////////////////////////////////////////////////////////////////////////////////////
char *color_name;
/* 燈光顏色 */
switch (sg_ProductData.m_color) {
case 0:
color_name = " RED ";
break;
case 1:
color_name = "GREEN";
break;
case 2:
color_name = "BLUE";
break;
}
if (sg_ProductData.m_power_switch == 1) {
/* 燈光開啟式,按照控制參數展示 */
light_power_on();
light_change_color(color_name);
light_change_brightness(sg_ProductData.m_brightness);
} else {
/* 燈光關閉展示 */
light_power_off();
}
}
在該函數中處理邏輯與硬件控制,當接收到云端的消息,數據已經處理封裝在pdata。此時我們在控制臺發送指令就可以。
騰訊的TencentOS tiny物聯網開發還是很方便的,最重要的是網上的大神豐富了例程,很多東西拿來就能用,省去很大的精力開發,我也是借鑒了大神們的demo,此文最主要的目的是完善這個流程,代碼還是其他人的,自己只是在上面做了一些修改。