色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

快速接入阿里云物聯網平臺技術方案分享

嵌入式悅翔園 ? 來源:程序員小哈 ? 2023-04-10 15:54 ? 次閱讀

上一篇網文,我們實現ESP8266固件的下載、一鍵配網和云智能APP綁定設備。

Windows下AliOS Things環境搭建及ESP8266 固件下載

隨著物聯網設備的普及,物聯網操作系統也成了廣大開發者熱烈討論的話題之一,很多的組織和廠商都推出了在物聯網節點上的基礎軟件——物聯網操作系統,如國內云服務供應商Alibaba推出的AliOS Things ,Amazon公司的Amazon FreeRTOS,再如開源社區領袖Linux基金會推出的Zephyr,以及在國內知名度很高的RT-Thread等等。

今天我們來對AliOS Things中的示例linkkitapp例程進行一下解析,希望可以為你解惑一二。

系統架構

AliOS Things是什么?

AliOS Things是面向IoT領域的輕量級物聯網嵌入式操作系統。致力于搭建云端一體化IoT基礎設備。具備極致性能,極簡開發、云端一體、豐富組件、安全防護等關鍵能力,并支持終端設備連接到阿里云Link,可廣泛應用在智能家居、智慧城市、新出行等領域。

AliOS Things是阿里巴巴推出的物聯網設備端軟件框架,物聯網設備可以通過AliOS Things設備框架接入阿里云,使用云服務器提供的相關物聯網設備服務。

AliOS Things軟件框架是基于APACHE2.0協議的開源軟件,項目地址為:https://github.com/alibaba/AliOS-Things

AliOS Things軟件架構可以從下到上分為四層,硬件和硬件抽象層、AOS操作系統層、應用框架層和應用層,下層組件為上層業務邏輯的實現提供支撐機制。

從底部到頂部,AliOS Things包括:

板級支持包(BSP):主要由SoC供應商開發和維護

硬件抽象層(HAL):比如WiFi和UART

內核:包括Rhino實時操作系統內核、Yloop, VFS, KV 存儲

協議棧:包括TCP/IP協議棧(LwIP),uMesh網絡協議棧

安全:安全傳輸層協議(TLS),可信服務框架(TFS)、可信運行環境(TEE)

AOS API:提供可供應用軟件和中間件使用的API

中間件:包括常見的物聯網組件和阿里巴巴增值服務中間件

示例應用:阿里自主開發的示例代碼,以及通過了完備測試的應用程序(比如Alinkapp)所有的模組都已經被組織成組件,且每個組件都有自己的.mk文件,用于描述它和其它組件間的依賴關系,方便應用開發者按需選用。

我們一般只需要關心示例應用部分,找一個跟自己的需求接近的示例,然后在其上進行更改即可,我們使用的示例就是linkkitapp。

結構框圖

e25e0ffc-d773-11ed-bfe3-dac502259ad0.png

目錄結構

e27c3a54-d773-11ed-bfe3-dac502259ad0.png

文件夾名稱 內容描述
3rdparty 第三方庫相關功能代碼
app 示例程序相關代碼
board 評估板(如我們使用的ESP8266)
build 編譯框架
include 系統頭文件
kernel 包括Rhino和協議棧
Middleware 阿里巴巴增值和常用的物聯網組件,包括Linkkit,OTA(安全差分升級),ulog(日志服務),uData(傳感器框架),uLocation(定位框架),WiFi配網 等
Network 包括LwIP 輕量級TCP/IP協議棧,uMesh 自組網協議棧,BLE 低功耗藍牙協議棧,LoRaWAN 協議棧,AT Commands Module 等
osal AOS API,提供可供應用軟件和中間件使用的API
out 編譯輸出目錄
platform 芯片架構支持的相關文件;該目錄下包含了mcu與arch文件夾;mcu:該目錄主要存放廠商提供的芯片底層軟件庫代碼(如ESP8266庫),主要由SoC供應商開發和維護,以及二進制文件,如系統啟動、驅動、編譯/鏈接腳本等。mcu下的目錄結構按“廠商/芯片系列”進行區分。arch:主要存放硬件體系架構所需要的移植接口實現文件,如任務切換、啟動、開關中斷等,硬件體系架構如arm、xtensa…。
security 包括TLS,TFS, TEE在內的安全組件
utility IoT通用軟件庫,比如 cjson、libc等

為什么D5(GPIO14)是一鍵配網的引腳?

首先我們看一下,D5引腳在哪里?

官方介紹: WeMos D1 mini pins and diagram

https://escapequotes.net/esp8266-wemos-d1-mini-pins-and-diagram/

e29681ac-d773-11ed-bfe3-dac502259ad0.png

D5是WeMos D1 mini模塊的引腳,GPIO14是ESP8266的引腳,兩個標識對應的一個引腳。

那linkkitapp代碼中哪里對應著一鍵配網的代碼呢?

程序入口在app_entry.c中的int application_start(int argc, char ** argv) 函數。

e2c6940a-d773-11ed-bfe3-dac502259ad0.png

在application_start函數中有這樣一行:

e2e44e14-d773-11ed-bfe3-dac502259ad0.png

從函數名上看,這是一個注冊事件過濾器的,過濾的目標是按鍵點擊事件,并處理按鍵點擊事件的,“linkkit按鍵處理”回調函數。

該函數的實現如下:

e300a0be-d773-11ed-bfe3-dac502259ad0.png

事件值為VALUE_KEY_CLICK將進入awss配網模式;

事件值為VALUE_KEY_LTCLICK將進行awss復位操作。

經過定位排查,我們知道在 key_poll_func(void * arg) 函數中,實現了判斷按鍵(短按、長按、長長按),然后分別向系統發出不同的按鍵事件aos_post_event()。

e30bcc64-d773-11ed-bfe3-dac502259ad0.png

由上我們知道了AliOS定義的配網按鍵就是GPIO14,也就是mini D1 ESP8266模塊的D5腳。。

詳細請參考:ESP8266配網--key.c之按鍵事件分析
https://www.jianshu.com/p/fab0ea9e9ad3

ESP8266與主單片機之間的關系

STM32-->ESP8266-->阿里云物聯網平臺-->手機等終端

我們使用ESP8266模塊,只是把ESP8266當做一個數據傳輸的媒介,STM32與ESP8266模塊通過串口進行通信

STM32獲得外部傳感器的狀態,然后通過串口發送狀態至ESP8266模塊。

經ESP8266模塊內部的AliOS Things對數據包進行打包,然后將數據包通過WiFi網絡發送至阿里云物聯網平臺。

由于手機端與阿里云物聯網平臺保持著長連接,所以阿里云物聯網平臺獲得到的傳感器數據能夠及時推送至手機端,進而保持設備端的傳感器數據和手機端的數據保持一致性。

手機等終端-->阿里云物聯網平臺-->ESP8266-->STM32

反過來,通過手機端的云智能APP對設備進行操作,首先會將操作設備的指令推送至阿里云物聯網平臺,阿里云物聯網平臺會及時將指令推送至ESP8266模塊,ESP8266模塊會對收到的指令進行數據轉發,將指令通過串口傳輸給STM32。

由于阿里云物聯網平臺推薦數據格式為ICA標準數據格式(Alink JSON),STM32端需要對接收到的串口信息進行解析,即對接收到的JSON字符串進行解析,然后對解析后的結果進行判斷,根據指令不同進而做不同的動作。

有人可能會說,ESP8266這個單片機性能這么好,不利用它浪費了;

還有人會說對于智能風扇這樣的簡單應用,只需要ESP8266作為主芯片即可,加上外圍電路,多省事多節約成本呀。

的確ESP8266性能很好,只是使用ESP8266的確夠用。那我們為什么還要使用上面這種方式,額外浪費一個STM32單片機呢?

這種方式最大的好處就是,降低物聯網模塊的使用門檻,為什么這么說呢?

上面的通信方式,只需要一個具有串口功能的單片機就可以與ESP8266配合使用,而一般的單片機都有1-2個以上的串口,所以條件很容易就滿足了。

這樣,我們只需要在你原有的設計方案的基礎上,額外占用一個串口,就可以在不改變整體電路設計的基礎上,添加物聯網功能。

而外圍單片機的選擇就很自由了,可以根據功能需要,選擇便宜的或者性能比ESP8266更優的作為主單片機。

另外一點,如果拿ESP8266作為主單片機的話,那么就要對ESP8266有比較深入的了解,這樣無疑增大了難度,當某天需求改變或者ESP8266性能無法滿足的時候,我們更換了ESP8266的芯片,那么整體方案都要改,而且你還要重新熟悉一個新的物聯網芯片,學習成本太高了。

需要解決的問題

ESP8266 有兩個UART:UART0和UART1。

UART0有TX、RX,可以作為系統的打印信息輸出接口和數據收發口。

UART1的RX被Flash占用,只有發送引腳TX(GPIO2,即UART1_TXD)可供使用,所以一般作為打印信息輸出接口(調試用)。

通常情況下,我們使用UART0和外設通訊,而使用UART1作為日志打印端口

D1 mini ESP8266模塊兩個串口的所在位置:

e33f52be-d773-11ed-bfe3-dac502259ad0.png

我們使用一個Micro USB線與D1 mini ESP8266模塊相連,使用串口會收到如下打印信息:

e388fbbc-d773-11ed-bfe3-dac502259ad0.gif

我們可以看到默認的linkkitapp示例,Log信息是通過UART0發送出來的,而且里面有很多咱們不關心的信息,應該將此部分信息進行屏蔽。

所以我們需要做如下幾個工作:

將串口的比特率由921600修改為115200(此部分工作可不做);

交換UART0和UART1,讓UART1輸出Log日志;UART0與STM32進行通信;

將STM32發上來的信息,通過UART0接收并發送到云端;將云端下發的有用的信息通過UART0轉發給STM32。

解決問題1. 串口的初始化api在platformmcuesp8266spdriveruart.c中,目前的代碼是默認如果不設置,uart0波特率是921600。但是一旦初始化了uart1,uart0的波特率會被改為和uart1一樣。

void
uart_init_new(uart_dev_t*uart)
{
UART_WaitTxFifoEmpty(UART0);
UART_WaitTxFifoEmpty(UART1);

if(uart==NULL)
{
return;
}


if(uart->port==1)
{
//printf("port=1
");

//uart1setting
UART_ConfigTypeDefuart_config;
uart_config.baud_rate=uart->config.baud_rate;
uart_config.data_bits=UART_WordLength_8b;
uart_config.parity=USART_Parity_None;
uart_config.stop_bits=USART_StopBits_1;
uart_config.flow_ctrl=USART_HardwareFlowControl_None;
uart_config.UART_RxFlowThresh=120;
uart_config.UART_InverseMask=UART_None_Inverse;
//UART_ParamConfig(UART0,&uart_config);


//uart2settingforlog
//uart_config.baud_rate=uart->config.baud_rate;
UART_ParamConfig(UART1,&uart_config);

UART_SetPrintPort(UART1);
//UART_intr_handler_register(uart0_rx_isr,NULL);
ETS_UART_INTR_ENABLE();
}
else
{
//printf("port=0
");
UART_ConfigTypeDefuart_config;
uart_config.baud_rate=uart->config.baud_rate;
//uart_config.baud_rate=BIT_RATE_921600;
uart_config.data_bits=UART_WordLength_8b;
uart_config.parity=USART_Parity_None;
uart_config.stop_bits=USART_StopBits_1;
uart_config.flow_ctrl=USART_HardwareFlowControl_None;
uart_config.UART_RxFlowThresh=120;
uart_config.UART_InverseMask=UART_None_Inverse;
UART_ParamConfig(UART0,&uart_config);


UART_IntrConfTypeDefuart_intr;
uart_intr.UART_IntrEnMask=UART_RXFIFO_TOUT_INT_ENA|UART_FRM_ERR_INT_ENA|UART_RXFIFO_FULL_INT_ENA|UART_TXFIFO_EMPTY_INT_ENA;
uart_intr.UART_RX_FifoFullIntrThresh=100;//10
uart_intr.UART_RX_TimeOutIntrThresh=10;//2
uart_intr.UART_TX_FifoEmptyIntrThresh=20;
UART_IntrConfig(UART0,&uart_intr);


UART_SetPrintPort(UART0);
UART_intr_handler_register(uart0_rx_isr,NULL);
ETS_UART_INTR_ENABLE();
}
}


解決問題2. 交換UART0和UART1:修改此文件:AliOS-Thingsplatformmcuesp8266haluart.c

e3a9ca9a-d773-11ed-bfe3-dac502259ad0.png

解決問題3.

下發有用信息:

e3cc8a3a-d773-11ed-bfe3-dac502259ad0.png

上發有用信息:

e3e87254-d773-11ed-bfe3-dac502259ad0.png

模擬上傳屬性

經過上面的改造之后,我們只需要向UART0發送JSON格式的數據,即可修改服務器端的數值,比如串口助手中發送:

{"CurrentTemperature":26}

發送完畢,服務器端的當前溫度值將會修改為26℃,在運行狀態中可以實時看出來當前溫度值是實時變化的。

e4061dc2-d773-11ed-bfe3-dac502259ad0.gif

模擬設置屬性

手機端APP點擊某個按鈕之后,將會將數據包發送至ESP8266,ESP8266將有用信息通過UART0的TX引腳發送給STM32,STM32將收到服務器端指令,對此指令進行解析,進而做相應的動作,具體邏輯類似下圖所示。

e41e5f2c-d773-11ed-bfe3-dac502259ad0.gif

調試真實設備中,對電源開關設置為1,即{"PowerSwitch":1},在串口助手中我們收到指令{"PowerSwitch":1};

我們對電源開關設置為0,即{"PowerSwitch":0},可以看到串口助手中,收到對應的指令{"PowerSwitch":0}。

STM32中我們使用cJSON對上面字符串進行解析即可,然后做相應的動作,即完成了云端對設備的遠程控制。

細心的人可能發現了,為什么我們用CurrentTemperature或者PowerSwitch來設置屬性呢?其實他們就是我們創建產品的時候,進行功能定義的時候,設置的標識符。

e44bc084-d773-11ed-bfe3-dac502259ad0.png

到此為止,本月的“智能風扇”涉及到的知識點基本都已經講過了,下一篇網文,就對此項目進行最后的收尾,大家敬請期待哈。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 物聯網
    +關注

    關注

    2909

    文章

    44671

    瀏覽量

    373629
  • Linux
    +關注

    關注

    87

    文章

    11310

    瀏覽量

    209597
  • WINDOWS
    +關注

    關注

    4

    文章

    3547

    瀏覽量

    88752
  • 阿里云
    +關注

    關注

    3

    文章

    956

    瀏覽量

    43058
  • RT-Thread
    +關注

    關注

    31

    文章

    1291

    瀏覽量

    40167

原文標題:快速接入阿里云物聯網平臺技術方案分享

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于阿里HiTSDB搭建工業聯網平臺實踐

    上管理的實踐案例。背景工業企業的能耗占了全社會能耗的絕大多數,本方案基于阿里全面的聯網
    發表于 04-24 15:37

    支持阿里Link聯網平臺的CC2640R2F解決方案

    ,結合阿里Link聯網平臺旗下阿里智能APP SDK,幫助開發人員
    發表于 03-19 06:45

    基于CC2640R2F的SDK支持阿里Link聯網平臺

    上?是否想在節省時間的同時,便捷地獲取更加強大的功能、穩定性和多重云端安全保障?德州儀器(TI)的CC2640R2F解決方案支持阿里Link聯網
    發表于 07-15 06:51

    踏入聯網第一篇——STM32F103開發板接入阿里IOT平臺 精選資料分享

    遠BC26,溫濕度傳感器是DHT11 ,開發板自帶SIM卡槽,我用的是移動的NB-iot聯卡(稍微吐槽下,nb卡的信號是真的不好)。說是接入阿里
    發表于 07-29 06:47

    微信小程序連接阿里聯網平臺云端API實現聯操控

    微信小程序連接阿里聯網平臺云端API實現聯操控03-25其中包含cryptojs、uuid
    發表于 08-18 06:28

    阿里聯網平臺接入NodeMCU的方法

    文章目錄NodeMCU(ESP8266) 接入阿里聯網平臺 踩坑之旅NodeMCU簡介
    發表于 11-03 07:11

    如何利用模組+MCU的方式接入阿里聯網

    利用模組+MCU的方式接入阿里聯網有兩種選擇:1.選擇模組內集成了阿里
    發表于 11-03 06:14

    利用模組+MCU的方式接入阿里聯網有哪幾種選擇

    利用模組+MCU的方式接入阿里聯網有兩種選擇:1.選擇模組內集成了阿里
    發表于 12-16 06:20

    NodeMCU開發板接入阿里聯網平臺和百度天工聯網平臺的注意事項

    的也是NodeMCU開發板。下面是分別是接入阿里聯網平臺和百度天工
    發表于 01-24 07:46

    M5311模塊MQTT協議連接阿里聯網平臺相關資料下載

    一、準備三元組在阿里聯網平臺新建產品和設備后,平臺給每一個設備自動賦予三元組。二、準備MQT
    發表于 02-11 07:08

    怎樣在阿里聯網平臺上進行單片機程序的編寫呢

    阿里聯網平臺是怎樣設置的?怎樣在阿里
    發表于 02-22 06:04

    阿里開放聯網技術開發平臺

    中國杭州,2021 年 12 月 8 日-阿里巴巴集團的數字技術和智能骨干阿里宣布已開放其專有的
    發表于 03-08 08:50

    阿里聯網平臺產品和設備的創建過程

    硬件環境原子F429開發板,路由器,軟件環境阿里聯網平臺、rtthread 相關組件一.阿里
    發表于 10-24 15:00

    NodeMCU(ESP8266) 接入阿里聯網平臺 踩坑之旅

    文章目錄NodeMCU(ESP8266) 接入阿里聯網平臺 踩坑之旅NodeMCU簡介
    發表于 10-28 10:21 ?23次下載
    NodeMCU(ESP8266) <b class='flag-5'>接入</b><b class='flag-5'>阿里</b><b class='flag-5'>云</b><b class='flag-5'>物</b><b class='flag-5'>聯網</b><b class='flag-5'>平臺</b> 踩坑之旅

    將NodeMCU接入聯網平臺的踩坑之路(阿里、百度天工)

    將NodeMCU接入聯網平臺的踩坑之路(阿里、百度天工)
    發表于 11-29 18:06 ?15次下載
    將NodeMCU<b class='flag-5'>接入</b><b class='flag-5'>物</b><b class='flag-5'>聯網</b><b class='flag-5'>平臺</b>的踩坑之路(<b class='flag-5'>阿里</b><b class='flag-5'>云</b>、百度天工)
    主站蜘蛛池模板: 美国兽皇zoo在线播放| 欧美亚洲精品午夜福利AV| 耻辱の奴隷淑女中文字幕| 国产成年人在线观看| 日本又黄又爽又色又刺激的视频| 东北嫖妓对白粗口| 小伙无套内射老女人| 国内精品视频一区二区在线观看| 夜色88V精品国产亚洲AV| 蜜臀AV色欲A片无码一区| 边摸边吃奶边做带声音| 亚洲第一成年网站视频| 蜜桃精品成人影片| 俺也去最新地址| 亚洲国产成人在线| 男生互捏jiji的故事| 国产偷国产偷亚州清高| 最近的2019中文字幕国语| 色中色入口2015| 久青草国产在视频在线观看| 儿子操妈妈视频| 夜色女人香| 三级黄.色| 考试考90就可以晚上和老师C| 俄罗斯少女人体| 在线不卡中文字幕| 沈芯语麻豆0076 视频| 老师破女学生特级毛片| 国产白丝JK被疯狂输出视频| 最新国产精品福利2020| 污污又黄又爽免费的网站 | 国产69精品久久久久乱码免费| 一本色道久久综合亚洲精品加| 色百度网址大全| 蜜桃久久久亚洲精品成人| 果冻传媒在线观看完整版免费| 超碰免费视频caopoom9| 伊人精品久久久大香线蕉99| 天天色狠狠干| 青青草A在在观免费线观看| xxx粗大长欧美|