天天看點

STM32+LORA晶片調試

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

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

    整個項目由3個同學協作完成,我主要負責通信部分的調試。

1.項目概述:通過單片機控制lora節點,發送資料給“lora資料集中器”,資料集中器将資料上發給指定伺服器,進行軟體端的開發。

STM32+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,然後進入集中器設定界面(如下)。伺服器設定:指定集中器資料上傳的伺服器。基本設定:設定與節點連接配接的相關參數。通道:就是資料傳輸的通道,彼此間參數各不相同(主要是頻率這部分),防止資料沖突。

STM32+LORA晶片調試

       (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),如果已知産品數量,那麼,依舊可以采用狀态機來解決重複燒錄這個問題。

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

我曾許下十年,隻為最美的遇見。

繼續閱讀