最近接手一個新項目,主要是用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,然後進入集中器設置界面(如下)。服務器設置:指定集中器數據上傳的服務器。基本設置:設定與節點連接的相關參數。通道:就是數據傳輸的通道,彼此間參數各不相同(主要是頻率這部分),防止數據衝突。
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),如果已知產品數量,那麼,依舊可以採用狀態機來解決重複燒錄這個問題。
暫時先總結出這麼多,希望對讀者能有一定幫助。
我曾許下十年,只爲最美的遇見。