需求:
某些工控設備具有以太網介面,內部是一個Web服務器,把作業資料匯總,呈現在html頁面上,甲方希望脫離集中控制器,資料直接上云,這樣可以快速部署工控設備,不需要布網線,裝中控PC軟體之類的,
為此,需要一個類似DTU的設備,直接通過以太網,在工控機的web頁面上讀取資料,發送到云平臺上,
傳統方案:
最常見的是STM32單片機(最近價格飛起來了,從十幾塊漲到一百多塊),在網上找STM32的HTTP客戶端的程式,還要找STM32外接以太網驅動芯片的板子和驅動代碼,還有lwip,或者帶TCPIP協議堆疊的ucos系統,組合,除錯,沒有一周搞不定,
我拿起祖傳的Haas100和最新的Alios Things 3.3,搗鼓了三個小時,其中兩小時在跟別人聊STM漲價的事,實際上也就半個小時,就完成這個功能,自己都覺得很不可思議,
下面簡單說下程序:
目錄
1.搭建模擬測驗的Web服務器
2.用haas100做個http客戶端
2.1 添加依賴
2.2 下載組件
2.3 添加示例
2.4 編譯運行
后記
1.搭建模擬測驗的Web服務器
首先,做一個測驗用的web服務器,聽起來是不是覺得有點復雜,可是萬能的python只要一句:
python3 -m http.server 80
就在這條陳述句所在的檔案夾,建立起一個Web服務器了,里面你放什么html檔案,就會在這個web服務器上看到什么html頁面,是不是超級easy?
我把工控機的html頁面放了進去,作為測驗頁面,
2.用haas100做個http客戶端
本以為很難,實際上只要啟用http組件,稍微修改一下就可以了,我用的solution是OTA的,已經實作了資料上云,我在這個工程里,按照下面的步驟操作:
2.1 添加依賴
案例下載完成后,需要在ota_demo工程的package.yaml中添加對組件的依賴:
depends:
- http: rel_3.3.0 # helloworld_demo中引入http組件
2.2 下載組件
在已安裝了 alios-studio 的開發環境工具列中,選擇Terminal -> New Terminal啟動終端,并且默認作業路徑為當前工程的workspace,此時在終端命令列中輸入:
aos install http
上述命令執行成功后,組件原始碼則被下載到了./components/http路徑中【這步不做也行,我clone下來的時候,已經有http了】,
2.3 添加示例
在http組件的package.yaml中添加example示例代碼:
source_file:
- "src/*.c"
- "example/http_example.c" # add http_example.c
2.4 編譯運行
想快一點看到效果,直接編譯就可以了,在終端視窗輸入:
http_example
就可以看到串口列印出來的百度首頁的html報文,調皮的Alios Things開發工程師用友商的官網做測驗頁面,這樣真的好嗎?是向百度致敬嗎?
3.C語言從html中讀取想要的資料的函式
更新代碼
/*****/
//函式名稱:char SerchHtmlStrings(char* htmlstr,char* location1,char* location2,char BeginChr,char EndChr,char* Result)
//函式功能:查找html頁面中的函式
//回傳值:0=沒有查找到,1=查找成功;
//引數1:htmlstr:保存了HTML字串的報文字串地址;
//引數2:location1
//引數3:location1
//引數4:BeginChr
//引數5:EndChr
//引數6:Result
int SerchHtmlStrings(char* htmlstr,char* location1,char* location2,char BeginChr,char EndChr,char* Result)
{
char *chrret;
char *pchrret;
char *pchardata;
chrret = strstr(htmlstr,location1);
chrret = strstr(chrret,location2);//chrret應該等于"value="40.3" ……
if (chrret == NULL)
{
return 0;
}
pchrret = chrret;//二次篩選后的起始地址傳遞給指標變數;
while((*pchrret)!=BeginChr)//如果取出來的數不等于“,就遞增指標,等于就跳出
{
pchrret++;
}
pchrret++;//再遞增一次,就應該出現4了,
pchardata=Result;//指標指向陣列起始位置
while((*pchrret)!=EndChr)//如果不等于”,那就拷貝內容到chardata里,知道等于就不拷貝了
{
*pchardata=*pchrret;
pchardata++;
pchrret++;
}
*pchardata = '\0';//添加字串結束符
return 1;
}
后記
讀取到示例的html報文完成了80%的作業,還要在茫茫的HTML報文里定位我需要的資料,好在有C語言標準庫函式strstr()可以用,明天繼續干活,
Alios Things 軟體積木和HAAS硬體積木,讓嵌入式開發發生了巨大的變化,極大的縮短了開發的周期,在專案預研階段尤其展示了其快速開發的優勢,希望芯片和模組的供應鏈能力能夠同樣的給力,那就無敵了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289684.html
標籤:其他
上一篇:物聯網場景中的實時計算問題與方案
