STM32+LORA芯片調試

最近接手一個新項目,主要是用stm32做控制芯片,然後利用lora通信,實現相關功能。

  1. 項目概述
  2. 硬件設備
  3. 項目流程
  4. LORA介紹
  5. 理論知識
  6. 調試流程
  7. 調試中的問題
  8. 個人反思

    整個項目由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),如果已知產品數量,那麼,依舊可以採用狀態機來解決重複燒錄這個問題。

暫時先總結出這麼多,希望對讀者能有一定幫助。

我曾許下十年,只爲最美的遇見。

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章