本篇實現Arduino與FPGA交互,當然也沒有什麼新的協議,還是基於串口通訊,現在學一個串口通信基本上可以驅動大多數模塊了,而且和各種單片機無縫數據交互,Arduino由於其強大的庫函數支持,在實現很多事情上會方便很多,比如串口通訊,Arduino就兩行的代碼,Verilog至少也得上百行,但是從 ...
本篇實現Arduino與FPGA交互,當然也沒有什麼新的協議,還是基於串口通訊,現在學一個串口通信基本上可以驅動大多數模塊了,而且和各種單片機無縫數據交互,Arduino由於其強大的庫函數支持,在實現很多事情上會方便很多,比如串口通訊,Arduino就兩行的代碼,Verilog至少也得上百行,但是從學習知識的角度上來說,學Arduino也只不過是學了一門軟體操控硬體的方法罷了,而且很多東西都簡化了,跟在電腦上編程沒什麼兩樣,還不如學學單片機。最起碼還能瞭解其內部各種寄存器的使用。我用Arduino也就是玩玩,當然還是有了很多不一樣的體驗,都知道Arduino是開源項目,我們可以免費使用別人的代碼,當然也要分享出來自己的代碼,將開源進行到底。
Arduino的編程語言沒啥說的,使用一種簡易版的C語言編程,一般有C語言基礎的朋友應該兩天就上手了,然後就是利用各種函數了,我在做實驗的時候,學到了一個函數,map函數。現在來說說吧!下麵張圖其實是很形象的。
再看一下官方給的解釋,即把一個數從一個範圍變換到另一個範圍。
map(value, fromLow, fromHigh, toLow, toHigh)
Description
Re-maps a number from one range to another.
That is, a value of fromLow would get mapped to toLow, a value of fromHigh to
toHigh, values in-between to values in-between, etc.
我使用Arduino採集到土壤濕度模塊的數據,200-100不等,Arduino讀取模擬量的最大數值為1023,而這麼大的數據,也並不是我們需要的,我們需要的是一個百分數,所以使用map函數,把0-1023這個區間投影到0-100這個區間,那麼得出來的數據就可以近似的認為是土壤濕度百分比了。
Arduino原本的串口只有一個,那麼如果必須要用兩個或以上串口來收發數據怎麼辦,這個時候使用軟體模擬串口就可以了。官方給的配置歷程,調用SoftwareSerial庫函數,
初始化配置波特率
輸出的時候使用Serial.write()函數,這裡要註意的是Serial.print輸給串口的是ASCII碼值,Serial.write輸入給串口的是真實數值,我這裡需要的是arduino採集到的土壤濕度,當然希望直接是十六進位的代碼了。
實現數據上傳至貝殼物聯,最終要的是需要ESP8266 WIFI模塊了,模塊配置如下。
ESP8266模塊支持STA/AP/STA+AP 三種工作模式。
*STA 模式:ESP8266模塊通過路由器連接互聯網,手機或電腦通過互聯網實現對設備的遠程式控制制。
*AP 模式:ESP8266模塊作為熱點,實現手機或電腦直接與模塊通信,實現區域網無線控制。
*STA+AP 模式:兩種模式的共存模式,即可以通過互聯網控制可實現無縫切換,方便操作。
我們這裡為了方便直接設置成兩種模式共存的狀態。
ESP8266的介面如下圖所示:
其中需要用的埠是TX,RX,CH_PD,VCC,GND
TX,RX分別接USB轉TTL介面的RX,TX,
CH_PD,VCC接3.3v(切記必須為3.3v)
GND接地
聯接物聯網
打開串口調試助手,搜索串口,將波特率設置為115200,然後將ESP8266的VCC引腳拔下在插上,會返回一串亂碼和ready,表示連接正常,如果沒有返回值,檢查引腳是否連接正確。
發送AT命令:+++,返回CLOSED,表示關閉之前設定的模式。
發送AT+CWMODE=3+回車,設置WiFi模塊為AT/AP模式,(WiFi模塊的知識需要看手冊),返回OK,表示設置成功
發送AT+CWJAP=”WIFI name”,”WIFI 密碼”+回車,連接WiFi。返回OK表示連接正確。
然後發送AT+CIPSTART="TCP","www.bigiot.net",8181+回車,返回如圖所示,表示連接到貝殼網。
這樣WiFi模塊就配置好了,然後將WiFi模塊連接到開發板上,通電後,就會自動連接到貝殼網上了。
WiFi模塊配置好了之後。我們這裡用第一個WiFi模塊配置連接到貝殼網,貝殼網是一個物聯網,可以實現與硬體進行遠程交互。
註冊一個貝殼網賬號www.bigiot.net
點擊添加一個設備
添加一個數據介面,這裡可以修改藉口類型
添加完成後,每一個設備都有自己專屬的ID,APIKEY,
每個設備有對應的數據介面,也有對應的ID
需要幾個數據介面你就添加幾個,我這裡添加了四個。然後根據代碼將所有模塊連接,連接設備,上傳程式,註意,上傳Arduino程式的時候一定要將0、1引腳拔下,否則肯定上傳失敗。上傳成功後,打開數據介面,可以看到數據實時上傳了,貝殼物聯還有相關的APP和微信公眾號,只要設備能連上網路,便可以對設備進行操控,所以遠程操控也毫無壓力。
通過軟串口發送數據給FPGA,FPGA通過處理後,發送數據到上位機,這樣便實現了FPGA和Arduino的數據交互,這樣便實現了物聯網。
當然Arduino還有很多方便又好玩的玩法,有興趣的朋友也可以繼續玩下去。如果你想要我這個實驗的源代碼,請在微信訂閱號後臺回覆“Arduino”即可獲的源代碼和庫文件哦!需要本設計FPGA部分代碼後臺發消息,聯繫訂閱號主,即可獲得!
轉載請註明出處:NingHeChuan(寧河川)
個人微信訂閱號:開源FPGANingHeChuan
如果你想及時收到個人撰寫的博文推送,可以掃描左邊二維碼(或者長按識別二維碼)關註個人微信訂閱號
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/7751382.html