一
設(shè)備端的開發(fā)是一個(gè)非常簡單的工作。零妖今天就簡單講解一下物聯(lián)網(wǎng)彈幕器這個(gè)設(shè)備的源代碼,給大家提供一個(gè)裸機(jī)上云的思路。連載文章更新到這里要告一段落,因?yàn)檎娴臎]啥要講的了。
二
首先要說的是使用技小新的MQTT單片機(jī)編程小工具生成一個(gè)C語言的頭文件,這個(gè)在之前的文章里已經(jīng)說過了。你的單片機(jī)要干的事情就是通過串口把這些16進(jìn)制的數(shù)據(jù)發(fā)送給CH9121模塊,然后CH9121模塊會(huì)自動(dòng)把這些數(shù)據(jù)打包一下以TCP的形式發(fā)送給服務(wù)器。
三
單片機(jī)的串口資源真的非常好用。STM32F103C8T6這個(gè)型號(hào)的單片機(jī)有三個(gè)可以獨(dú)立使用的串口資源,物聯(lián)網(wǎng)彈幕器真正用的其實(shí)是兩個(gè),一個(gè)是串口1和電腦的串口連接,調(diào)試代碼時(shí)候輸出數(shù)據(jù)用的,一個(gè)是串口3用來和CH9121通信用的。在代碼上你可以讓串口1和串口3連接在一起,這樣就可以在電腦上發(fā)送數(shù)據(jù)給CH9121了,實(shí)現(xiàn)的方法請(qǐng)看代碼。
在單片機(jī)的內(nèi)部程序里,也是可以控制串口3發(fā)送任何數(shù)據(jù)的,所以就能發(fā)送小工具生成的數(shù)組到CH9121了。代碼如下。
四
從云端下發(fā)給設(shè)備的信息可能每次都不一樣,比如說彈幕信息,每個(gè)人發(fā)送的都不一樣那么單片機(jī)接收的數(shù)據(jù)長度就不一樣,這需要你使用循環(huán)隊(duì)列的方法來接收數(shù)據(jù)。首先你要預(yù)測一下云端一次性有可能下發(fā)數(shù)據(jù)的最大字節(jié)數(shù),然后隊(duì)列緩沖區(qū)的大小要是它的兩倍以上。這樣的處理可以非常有效的防止數(shù)據(jù)接收丟失的問題。
五
為了示范物聯(lián)網(wǎng)設(shè)備的數(shù)據(jù)上報(bào)流程,物聯(lián)網(wǎng)彈幕器上面安裝了一個(gè)溫度傳感器。這個(gè)溫度傳感器輸出的是一個(gè)電壓信號(hào),這個(gè)電壓的大小是和溫度成正比例關(guān)系的。單片機(jī)能夠通過一種叫ADC的方法來獲取這個(gè)電壓數(shù)值,然后就可以計(jì)算溫度了。
六
在開始做規(guī)劃的時(shí)候,我從來沒有認(rèn)為顯示一個(gè)漢字會(huì)是整個(gè)項(xiàng)目中最大的絆腳石。從網(wǎng)頁上下發(fā)的彈幕信息是一個(gè)字符串,這個(gè)字符串是UTF8編碼的,英文字母一切正常,但是涉及到漢字就一定會(huì)亂碼,因?yàn)閱纹瑱C(jī)這邊按照往年經(jīng)驗(yàn)直接做了GBK編碼的處理。
經(jīng)過零妖老哥的不斷摸索,終于發(fā)現(xiàn)了一個(gè)曲折的救國之路,就是先把UTF8編碼轉(zhuǎn)換為Unicode編碼,然后再把它轉(zhuǎn)化為能夠顯示再OLED上面的點(diǎn)陣信息,存到外部存儲(chǔ)器里面,需要的時(shí)候就讀取一下并顯示出來。相關(guān)代碼如下:
七
好了,零妖老哥的物聯(lián)網(wǎng)全棧教程分享到這里就結(jié)束了。感謝各位兄弟的支持和鼓勵(lì)讓我有動(dòng)力連載完畢(堅(jiān)持做一件事情真的好難)。尤其感謝阿里巴巴IOT事業(yè)部的同學(xué)提供技術(shù)上的幫助。
有很多的想法和具體的細(xì)節(jié)是沒辦法在一個(gè)文章里寫清楚的,為了能幫助更多的朋友快速上云,零妖把這個(gè)教程拍成了一個(gè)系列的視頻教程,同時(shí)提供了物聯(lián)網(wǎng)彈幕器的相關(guān)硬件(前面已經(jīng)給了你開源地址,你完全可以自己做硬件哦)給想節(jié)約時(shí)間的工程師評(píng)估物聯(lián)網(wǎng)項(xiàng)目使用。
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44736瀏覽量
374463
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論