基於串口調試助手的WIFI模塊調試-FPGA簡單聯網(點燈)


根據正點原子的《ATK-ESP8266 WIFI用戶手冊》,使用XCOM V2.2串口調試助手測試WIFI模塊[26]。在本系統中運用到的功能主要是TCP/IP模式中的TCP Client透傳模式。發送指令的順序如下:

  1. 設置WIFI的模式為STA模式:AT+CWMODE=1響應:OK
  2. 重啟使命令生效:AT+RST。響應:OK
  3. 聯網:AT+CWJAP="wy225","pcblab225"(連接WIFI名稱(ssid)密碼)。響應:OK WIFIconnect GOTip
  4. 連接服務器:AT+CIPSTART="TCP","www.mjywxy.xin",80。響應:CONNECT OK
  5. 開啟透傳模式:AT+CIPMODE=1。響應:OK
  6. 開始透傳:AT+CIPSEND。響應: OK >
  7. 最后使用+++”退出透傳模式

結果如下使用GET方法,通過HTTP請求的方法發送數據,得到服務器返回的數據如下。

 

圖1 WIFI調試之HTTP請求

服務器端wifi.php程序主要代碼如下。

 

圖2 wifi.php主要程序

第一個if判斷,是否獲取到數據;第二個if判斷獲取到數據中a的值是否是01。如果是則表示存儲a的值到wifi.dat文件中,否則從wifi.dat文件中讀取a的值返回。

 

…… FPGA-UART-WIFI

原計划UART部分使用NiosII搭建,但是使用片上ROM進行搭建系統時會提示內存不足,ELF文件下載失敗。EP4CE6E22C8N只有276480bits的片上ROM。但是NiosII+UART需要27480Byte,編譯顯示超過片上ROM106%內存占用率。故需用SDRAM(只買了SDRAM)作為系統的復位向量和錯誤向量NiosII與原來用Verilog寫的系統要共用SDRAM,這無疑增加了系統的復雜程度,而且難以實現,故采用純Verilog進行整個系統的編寫。

…… UART_TX

為了進行串口通信,首先進行串口發送模塊程序的編寫。其功能是每次發送一個字節的數據(串轉並),並可通過baud_set選擇不同的波特率,用tx_done信號表示已經發送完成。其端口定義如下。

1 UART發送模塊端口定義

端口名

位寬

輸入 / 輸出

說明

clk

1

input

時鍾信號50MHz

rst_n

1

input

復位信號,低電平有效

data_byte

8

input

要發送的數據

send_en

1

input

1使能發送(一個脈沖就好)

baud_set

3

input

波特率選擇端

rs232_TX

1

output

數據串行輸出引腳

tx_done

1

output

發送完成標志信號

uart_state

1

output

發送狀態,為1表示正在發送中

具體實現方法,包括波特率的計算、激勵文件的編寫等,參照《小梅哥的教學視頻》

…… UART_RX

關於串口接收程序,同樣參照《小梅哥的教學視頻》,有波特率的選擇、接收數據存儲(串轉並)和接收完成標志等功能。在頂層文件中例化uart的發送模塊,使用“In-System Source and ProbeIP核,完成在線發送和接收功能。

2 UART接收模塊端口定義

端口名

位寬

輸入 / 輸出

說明

clk

1

input

時鍾信號50MHz

rst_n

1

input

復位信號,低電平有效

data_byte

8

output

接收到的數據

baud_set

3

input

波特率選擇端

rs232_RX

1

input

數據串行輸入引腳

Rx_done

1

output

接收完成標志信號

…… UART_WIFI之自啟動聯網

首先發送數據到電腦上,通過串口調試助手,檢測發送數據的格式是否有問題。一開始通過按鍵控制發送數據的內容,確認無誤之后,再修改為自啟動。其中,為了避免插拔的麻煩,直接定義兩個相等的RXTX引腳,故定義模塊的端口如下表。

3 UART配置WIFI自啟動聯網模塊端口定義

端口名

位寬

輸入 / 輸出

說明

clk

1

input

時鍾信號50MHz

rst_n

1

input

復位信號,低電平有效

key

1

input

按鍵

rs232_tx

1

output

數據串行輸出引腳

rs232_rx

1

input

數據串行輸入引腳

test_tx

1

output

方便測試用,等於rs232_tx

test_rx

1

input

方便測試用,等於rs232_rx

led

1

output

LED燈,接收到指定數據的標志

關於程序,首先初始化要發送的數據,如圖7-4示。其中,由於之前連接了WIFI,模塊會保存賬號和密碼,故可不發送WIFI賬號和密碼。重啟之后,模塊會在5秒之內自動連接到WIFI,並獲得IP

關於波特率設置,因為ESP8266每次重啟之后,都會把波特率自動設置為115200,故配置UART的波特率為115200

 

圖3 自啟動聯網相關配置數據

需要注意的是,WIFI模塊數據接收時,以十六進制的“0A 0D”表示數據接收完成,對應到程序中是“\r\n”。還有,發送“+++”表示退出透傳模式,此時不需要“\r\n”,而且任何多余字符(包括空格、換行等)都不能有,否則無法退出透傳模式[26]

另外,還有一個需要注意的點是,Verilog中必須用雙引號包圍字符串。且發送CIPSTART的字符串時,也必須用雙引號。故此時就必須用反斜杠轉義雙引號。

首先,通過計數器cnt判斷發送到第幾字節了。由於字符串寄存器最大設置了42字節,所以當發送完第42字節時,讓cnt清零。相關程序如下:

 

圖4 發送完42字節清零寄存器

其中delay1s_cnt是延時1秒計數器,為了實現自動啟動(發送完一個字符串之后,自動發送下一個字符串)而設置。delay5s_cnt是延時5秒計數器,目的是為了保證模塊能獲得IP后再操作。

接下來開始按字符串的順序發送,其中,為了使每次都能正常退出透傳模式,在程序開始,首先發送+++”。之后,發送復位信號,使ESP8266重啟,此時需要等待5秒延時,才能保證模塊已獲得IP,能夠進行之后的數據發送。

 

5 發送數據轉換程序

由於uart_tx模塊每次只能發送一個字節,所以需要一個移位寄存器來表示,每次應該發送第幾個字節。相關代碼如下。

 

6 移位寄存器的實現

對於接收模塊,接收完成后判斷當接收到0時,讓LED燈亮;接收到K時,讓LED燈熄滅。實現其功能的代碼如圖所示。

 

7 接收到指定字符,執行相應操作代碼

將LED與單片機的舵機信號直連(使用電阻分壓),即可實現WIFI控制舵機,使攝像頭旋轉或者停止。關於程序部分,直接例化此模塊到myCamera的頂層文件即可。

…… 最終顯示結果

 

圖8 WIFI控制的顯示結果

從圖中可以看出網頁可以實現對藍色LED的亮滅控制。由於舵機控制無法從圖片上提現出來,故用LED燈指示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM