最近接手一個新項目,主要是用stm32做控制晶片,然後利用lora通信,實作相關功能。
- 項目概述
- 硬體裝置
- 項目流程
- LORA介紹
- 理論知識
- 調試流程
- 調試中的問題
-
個人反思
整個項目由3個同學協作完成,我主要負責通信部分的調試。
1.項目概述:通過單片機控制lora節點,發送資料給“lora資料集中器”,資料集中器将資料上發給指定伺服器,進行軟體端的開發。
名稱 | 作用 |
WH-L101-L(lora節點) | 單片機通過節點發送資料給集中器 |
LG220(資料集中器) | 集中器将資料上傳給指定伺服器 |
2.硬體裝置:“lora節點”*10, “lora資料集中器”*1,單片機型号為:stm32f103c8t6(自己設計的PCB);
若幹USB-TTL子產品,lora節點配套底闆一塊,吸盤天線若幹。
3.項目流程:首先确定整個項目所要實作的功能,根據功能背後的硬性要求,尋找對應的硬體裝置,制作選型文檔,從多元度進行考慮,縮小目标裝置的選擇範圍,先确定幾個大概選型,咨詢相關技術客服,了解實際的産品型号,最後再下單購買。
4.lora是一種遠距離、低功耗通信技術,全稱是:Long Range。
找了兩個簡單的介紹文檔,可以留作參考http://www.four-faith.com/2018/industry_0828/683.html (附有各種通信方式特點對照表)https://blog.csdn.net/Ttian6/article/details/94215277。
LORA的通信距離不等,我選擇的晶片支援通信距離為2KM左右,且通信距離可調,晶片功耗很低。lora 子產品很多,需要慎重選擇。
5.理論知識
介紹一下這套通訊裝置之間的關系:單片機控制節點,節點發送資料給資料集中器,集中器将資料上傳至伺服器。但是,這是在應用時的工作邏輯關系,如何調試這套裝置呢?必須先熟悉幾個軟體以及知識點。
網絡調試助手:一共分為序列槽和網口兩個調試端口。一般是将電腦當作本地伺服器,通過序列槽給一端(LORA晶片)發送資訊,然後網口一端顯示伺服器(本地伺服器的位址就是電腦的IP位址)接收到的資料(這裡的資料是由集中器所上傳)。
LORA的通信方式:lora節點與lora資料集中器之間通信,是依靠各自的lora吸盤天線,與網絡,基站等等無關;
MQTT協定:https://blog.csdn.net/anxianfeng55555/article/details/80908795
TCP/TP協定:就是簡單的通信協定啦,我在前幾篇部落格中都有過詳細介紹。
伺服器端口号:每一個伺服器都可以設定幾個特定的端口号供自己使用
本地端口号:就是目前裝置的端口号
伺服器端口号:伺服器或者網關開啟接口給除它之外的IP連接配接;本地端口:供其他伺服器或者裝置連接配接的接口編号。是以在此處,網絡調試助手與集中器之間,關系就應該是:網絡調試助手,端口号填寫集中器的伺服器端口号,集中器端口号與之相反。
6.調試流程:
(1)基于配套底闆調試LORA節點,進入AT指令,設定一些主要參數。購買配套底闆是為了防止自己畫的闆子出問題,用作對照實驗,且可以極大提升開發效率。小編
(2)調試集中器:成功配置集中器之後,就可以進行簡單的連接配接,以及與配套的透傳雲實作資料收發。
(3)基于自己設計的PCB闆調試LORA節點,也就是通過單片機發送指令,實作AT指令的收發。
(4)實際通信有效距離測試。
最後,也是最重要的一點,一定要學會看晶片使用手冊!!!!!!!
小編的調試步驟:
(1)檢視晶片快速入門手冊以及配套底闆的硬體說明,将晶片與配套底闆焊接,通過USB-TTL子產品連接配接電腦與底闆(已知采用序列槽通信),打開序列槽助手,發送指令快速進入AT模式,分别看各個參數的作用,并設定參數。
(2)為資料集中器供電(集中器的天線分别安上),并且電腦連接配接集中器的WIFI,登陸指定網頁:192.168.1.1,賬号密碼都是:root,然後進入集中器設定界面(如下)。伺服器設定:指定集中器資料上傳的伺服器。基本設定:設定與節點連接配接的相關參數。通道:就是資料傳輸的通道,彼此間參數各不相同(主要是頻率這部分),防止資料沖突。
(3)嘗試建立連接配接(采用本地伺服器):此時,焊接有晶片的底闆通過USB-TTL連接配接到電腦序列槽上,電腦連接配接集中器的WIFI,并且,将集中器的伺服器界面,伺服器IP位址設定為電腦IP,伺服器端口和本地端口設定好,在專門的配置軟體(網絡序列槽調試助手)中,也要保持一一對應的關系(類似序列槽通信的TX-RX,RX-TX),設定好波特率。通過序列槽發送資料,就可以在集中器端檢視發送的資料。 (4)将AT指令配置交由單片機完成(通過單片機發送指令,有2種方式,狀态機或者直接延時發送),通過閱讀晶片手冊,可以知道指令發送的起始信号和退出信号。 (5)測試自己設計的PCB闆子,先确定最小系統沒問題,然後将外圍電路及晶片焊接上,測試LORA晶片是否對單片機發送的指令做出預期回應(單片機序列槽1發送資料,然後将序列槽1接受的資料進行存儲,通過序列槽2發送給電腦顯示) (6)通過以上步驟,就能夠确定硬體大體的功能達到預期要求。傳輸距離,依靠天線電路。這部分電路設計很重要,我将單獨列一章作為介紹(兼顧PCB天線設計以及天線型号選擇)。 (7)單獨測試傳輸距離:分别采用改裝的吸盤天線以及PCB天線。發現傳輸速率越低(波長越長),傳輸距離越遠。 注意傳輸協定,標頭包圍,發送資料時,注意十進制和十六進制之間的轉換,發送字母S,就要通過序列槽發送S對應的ASCLL碼,而且是10進制的。單片機判斷資料,也就是判斷接收的ASCLL碼十進制的值。 (8)軟硬體對接,通過網絡序列槽調試助手,可以檢視資料。實際場景中,需要将集中器的伺服器位址改為指定雲伺服器的位址,然後由軟體背景進行判斷。
7.調試中的問題:
(1)始終無法進入AT指令:WH-L101-L-C型号的lora晶片,進入AT指令,需要嚴格遵循時序要求。此處,就以最簡單的延時函數調試單片機進入AT指令模式:(狀态機涉及資訊衆多,延時,簡單粗暴,可靠)
if(USART_RX_STA&0x8000)//接受到中斷,就執行儲存
{
USART_RX_STA=0;//對數組清零,友善下一次接收
len=USART_RX_STA&0x3fff;//取出u16中的低16 位,得到此次接收到的資料長度
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];//把每一個資料都在序列槽列印出來
while((USART1->SR&0X40)==0);//等待發送結束
}
USART_RX_STA=0;//對數組清零,友善下一次接收
if(keys==1)
{
printf("%c",j);
delay_ms(200);
printf("%c",j);
delay_ms(100);
printf("%c",j);
delay_ms(100);
}
delay_ms(400);
printf("%c",M);
delay_ms(500);
printf("AT+AID=00000001\r\n");
delay_ms(400);
printf("AT+NID=00013c2d\r\n");
delay_ms(400);
printf("AT+SPD=1\r\n");
delay_ms(400);
printf("AT+CH=72\r\n");
delay_ms(400);
printf("AT+ENTM\r\n");
delay_ms(400);
printf("AT+ENTM\r\n");
LED=!LED;
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
LED=!LED;
// printf("AT+AID\r\n");//可以查詢設定的資料
}
自己調試快一周,幾在崩潰邊緣徘徊,被同伴一語點破,甚幸甚幸呀。(以前用的通信子產品,進入AT指令沒有嚴格要求時序問題,更重要的,是暴露了自己的問題,幾次懷疑時序,但卻沒有付諸行動,導緻調試耗時巨大)。使用手冊,重要部分,一定要精度。
(2)很短時間就調試成功了資料集中器,但是,如何測試“有人公司”産品的實際傳輸距離呢?這裡就涉及到了網絡調試助手,以前一直認為網絡調試助手隻能在一台電腦上實作“串發網收”。是以在此處困惑許久,直至配置伺服器連接配接**公司透傳雲,都沒能進行資料傳輸測試。老師花了一分鐘,小編就明白了如何測試及原理:一台電腦連接配接"底闆+lora晶片",打開網絡調試助手的序列槽部分,另一台電腦打開網絡調試助手的網口部分(同時在集中器上設定好伺服器位址位本機IP位址,伺服器端口及本地端口),一台電腦移動,發送資料,在資料集中器端的電腦即可在網絡端口檢視資料。
(3)敢于質疑,在利用AD畫圖的時候,發現晶片手冊上存在問題,前後對照之後,果斷問了技術支援,更新了原理圖的版本。
(4)自己設計的PCB天線電路(外置天線),但是傳輸距離隻有10~20M遠,購買的底闆+晶片+吸盤天線,在學校内 傳輸距離達到了1000+(樓層越多,越密集,傳輸效果越不穩定,信号越弱),正在改進電路,希望下一版,自己設計的天線可以傳輸更遠的距離。
8.個人反思:接手了比較多的通信、物聯網相關項目,但是本次還是遇到了問題,足見自己功底不踏實。正如老師所說:想要快起來,必須先讓自己慢下來。并且,對于各種協定的了解,遠遠未達到清晰明了,依舊停留在了解的階段。
9.項目拓展,如果有n多個lora晶片需要接入同一個集中器,需要将修改集中器的接入節點數量,并且,在每一個單片機中燒錄指定程式(每個單片機對應一個晶片,程式中需要修改單片機AT指令中LORA節點的ID),如果已知産品數量,那麼,依舊可以采用狀态機來解決重複燒錄這個問題。
暫時先總結出這麼多,希望對讀者能有一定幫助。
我曾許下十年,隻為最美的遇見。