NODEMCU除錯心得2
關於LUA
和智慧雲平臺相似,nodemcu就是esp12的核心板加一個USB轉串列埠模組,晶片貌似比普通的USB轉TTL模組上的靠譜,電路板上用了比較貴的鉭電容,穩定性估計不錯。
雖然號稱是LUA專用平臺,但是你刷好韌體,用其它的SDK開發一點問題都沒有。但是
,LUA確實有它的優勢。下面就簡單介紹一下。
什麼是LUA
- LUA是一群巴西人在93年設計出來的。lua在葡萄牙語中是月亮的意思,發音就很像LUNA,我理解應該是
替月行道
的意思。 - Lua是很輕量的指令碼語言,只有1M。
- 用C語言編寫,和C++,C可以相互呼叫。
- 沒有自己的庫函式,因為都用別人現成的。
- 穩定性,速度,功能都不錯。很多大型程式用來做嵌入式指令碼,比如魔獸世界,伯德之門,和。。。三國殺
- 當然最重要的是
免費
。
如果想了解lua的更多,可以
本人並不打算介紹具體語法,因為我也不懂,我們先程式設計再說。
Step1
首先,我們從停止執行的中文官網上搞一段程式碼,就是左上角的那段,先把路由器給連上。
print(wifi.sta.getip()) --nil wifi.setmode(wifi.STATION) wifi.sta.config("SSID","password") wifi.sta.connect() tmr.alarm(1, 1000, 1, function() if wifi.sta.getip() == nil then print("Connecting...") else tmr.stop(1) print("Connected, IP is "..wifi.sta.getip()) end end)
SSID
和password
要填自己路由器的名稱和密碼。下面逐段解釋:wifi.sta.getip()
是在station模式下獲取IP地址。--
是註釋符號,nil
是零的意思,在沒有連線路由時,返回的IP地址是空的。wifi.setmode(wifi.STATION)
很好理解,一共有三種模式,這裡設定成station
模式,可以連線路由器,其他兩種是AP
和AP+station
wifi.sta.config("SSID","password")
,就是設定路由器的密碼和賬號。- 然後連線
wifi.sta.connect()
tmr.alarm()
是一個定時器函式,一共有四個變數,分別是:
ID
1
interval
定時時間(ms),這裡選擇了1000
,就是1srepeat
重複鬧鐘次數,這裡選擇1
,在一次迴圈中只執行一次。function do
到事件後執行的函式,就是後面的if...else...
語句
if...then
如果獲得的IP還是空的,說明還在連線中else
如果返回值不為空,說明連上了tmr.stop(1)
,停止定時器1,- 然後
print()
列印IP地址wifi.sta.getip()
,..
是字串的連線符,把兩個字串連成一體。 - 結束
if
語句 - 結束
function
Step2
- 開啟ESPlor,在右側視窗,點重新整理(在open和速率選擇之間),選9600,open
- 右側串列埠視窗會顯示一堆無法接受正確資訊之類,不用搭理。
Can’t autodetect firmware, because proper answer not received (may be unknown firmware).
Please, reset module or continue. - 把
step1
中的程式碼,複製到右側視窗,然後save,儲存一個檔名connect.lua
程式碼編譯自動上傳,右側串列埠視窗顯示如下資訊,表示連線上了。
dofile(“connect.lua”);
nil
Connecting…
Connecting…
Connecting…
Connecting…
Connected, IP is 192.168.1.3注意不要忘記把ssid和passward改成自己路由器的。
wifi連上了,我們可以在電腦和nodemcu之間互發訊息,
Step3
首先整理一下思路,用過
AT
指令的朋友們知道,在station
模式下,建立TCP
連線的步驟是:Server
模式,AT+CIPMUX=1
開啟多連結模式;AT+CIPSERVER=1,8080
建立伺服器;開啟USR-TCP232-Test.exe
設定為客戶端並連線;AT+CIPSTO=2880
設定伺服器超時時間;AT+CIPSTATUS
檢視當前連線確保連線上。AT+CIPSEND=0,10
向客戶端傳送資料,長度為10Lua和
AT指令
都是在esp8266的原生API的基礎上進行封裝,所以步驟大同小異,開啟官方lua韌體裡的nodemcu-firmware-master\lua_examples\tcp2uart.lua
,把超時和埠改成2880和8080uart.setup(0,9600,8,0,1,0) sv=net.createServer(net.TCP, 2880) global_c = nil sv:listen(8080, function(c) if global_c~=nil then global_c:close() end global_c=c c:on("receive",function(sck,pl) uart.write(0,pl) end) end) uart.on("data",4, function(data) if global_c~=nil then global_c:send(data) end end, 0)
tcp2uart.lua
也是一個server
伺服器,通過uart
輸入資料傳送客戶端,和AT指令
是很相似的,逐段解釋程式:uart.setup()
設定串列埠埠,變數的含義分別是:只支援一個串列埠(0),波特率(9600),奇偶校驗(無),停止位(1),回顯(0,關閉)net.createServer()
建立伺服器,型別可以選擇net.TCP
或net.UDP
,超時設定為60
msglobal_c = nil
是一個net.socket
型別變數,賦值為空nil
,用來監聽
客戶端sv:listen()
的listen
是net.server
子模組下的監聽函式,(AT指令
自動執行監聽,不用設定),9999
是埠號,function()
是連線成功後的回撥函式,c
是回撥引數,代表客戶埠if...end
如果全域性變數gloabal_c
不為空,則關閉close
埠gloabal_c
global_c=c
把回撥引數c
賦值給全域性變數gloabal_c
on(event,function())
是net.socket
子模組下的函式,返回值是nil
(也是c
的),如果envet
事件發生,執行回撥函式function()
。這裡
event
是recieve
,接收資訊,function
的第一個變數sck
是socket的意思,就是伺服器連線的客戶端,p1
是從客戶端接收到字串。uart.write()
是function()
的內容,0
只支援一個串列埠,把接收到的p1
字串寫入串列埠end
結束function(sck,p1)
end
結束listen()
中的function(c)
uart.on()
設定UART事件的回撥函式,第一個變數method
只支援data
,表示收到資料,4
設定傳輸字元的長度,當收到第4個字串,就回調函式。function()
就是回撥函式,if...then...
是函式內容- 如果
gloabal_c
不為空,就向客戶端傳送send
資料data
,也就是uart
接收到的長度為4
的字串。 - 兩個
end
分別結束if
和function(data)
幾點說明
程式碼的功能分四塊,
- 第一塊
net.createServer()
設定伺服器 - 第二塊
listen()
實現監聽,如果已連線上,監聽成功,用if...then
把gloabal_c
清零,然後把USR-TCP232-Test
客戶端nec.socket
型別的c
賦給gloabal_c
- 第三塊
on()
實現從USR-TCP232-Test
客戶端接收資料,建立在監聽成功的基礎上 - 第四塊
uart.on()
實現向USR-TCP232-Test
客戶端傳送資料,只有監聽成功,gloabal_c
被賦值後,才能向USR-TCP232-Test
客戶端傳送資料
關於
net.socket
子模組gloabal_c
和c
都是nec.socket
類性子模組,代表USR-TCP232-Test
客戶端的連線,nec.sockt(
step2中儲存的
connect.lua檔案)塊包含
on,
clos,儲存並執行e,
send等方法,
gloabal_c和
c`都有呼叫sv
是由net.createServer()
建立的net.server
伺服器連線模組,包含listen
,close
,send
等方法,使用上與nec.socket
模組類似。nec.socket
型別可以通過net.createConnection()
建立,如果用nodemcu作為客戶端,使用該命令。
step4
- 在
ESPlore
左側視窗中,將step3
中的程式碼複製到step1
中的程式碼之下(step2
中儲存的connect.lua
檔案),儲存並上傳執行 - 右側串列埠視窗顯示連線成功,給出nodemcu的
IP地址
- 開啟
USR-TCP232-Test.exe
,右側視窗選擇client,伺服器地址輸入nodemcu的IP地址
,埠輸入8080
,點選連線 - 通過
ESPlore
的串列埠介面可以和USR-TCP232-Test
互發資訊,USR-TCP232-Test
接收到的貌似是ASCII碼
寫到這裡,這一部分快結束了,如果你想嘗試用nodemcu作為TCP client
,可以參考:
ESP8266新手入門除錯指導(補全)
- nodemcu 的API說明,中文API說明 和 英文API說明 以及官方lua韌體資料夾下的
\nodemcu-firmware-master\docs\en
,開啟這些.md
檔案你可能需要github出品的atom,非常好用的編輯器。中文說明有些錯誤,以.md
檔案為準 - 官方lua韌體資料夾裡還有nodemcu的各個模組的示例
nodemcu-firmware-master\lua_modules
和nodemcu-firmware-master\lua_examples
關於LUA語言
- 從lua的文風看,已經比較接近自然語言的感覺,這一點和python有點像,但是後者有成堆的庫檔案。語法結構比較簡潔。
- LUA是非同步事件驅動,語言風格和現在很火的Node.js非常接近。比如本文程式碼中的PI
listen()
,on()
等API,回撥函式嵌入到API中,一旦’event’事件發生就給予執行。對於有大量併發型事件的網路應用,執行效率應會提高不少。
下一篇準備寫寫各種網路協議:http
,udp
,telnet
等。
相關推薦
NODEMCU除錯心得2
關於LUA 和智慧雲平臺相似,nodemcu就是esp12的核心板加一個USB轉串列埠模組,晶片貌似比普通的USB轉TTL模組上的靠譜,電路板上用了比較貴的鉭電容,穩定性估計不錯。 雖然號稱是LUA專用平臺,但是你刷好韌體,用其它的SDK開發一點問題
NODEMCU除錯心得6
關於網路協議 HTTP 按照約定,這次要講非常exciting的內容,網路協議Networking protocols。 這部分並不好寫,內容很龐雜,會分成若干部分。 網路協議我們在前面已經提及,TCP/IP協議就是最重要的網路協議。在AT指令和lua韌體
NODEMCU除錯心得7
關於網路協議 HTTP 2 上一節,我們用nodemcu伺服器向客戶端傳送nodemcu的記憶體資訊。這一節反過來,我們介紹如何用客戶端控制nodemcu。 先介紹一個簡單的例子,用客戶端控制nodemcu的GPIO4,實現nodemcu的藍色LED遠端開關
NODEMCU除錯心得1
NODEMCU除錯心得 網上沒有nodemcu的中文資料,英文資料也比較零碎。結合自己的除錯過程,整理一個。 資料篇 github上的英文入門教程,一共三頁,強烈推薦。 有點混亂的官方
201671010106 2016-2017-2《Java程序設計》學習心得2
span 代碼 收獲 學習過程 課件 自己的 資源 pan java程序 通過對第三章的學習,漸漸的更加了解了java這門課程,這門課程跟我們之前的c語言有相同之處,也有他特有的地方,在本章的學習過程中,我覺得我的課前準備預習工作做的還是不太好,當第一節課
Java-JNA使用心得2
long 回調函數 {} length 內存 指針 instance 加班 java封裝 自5月初第一次嘗試使用Java封裝調用C的dll之後,已經先後經歷了3次小項目了。 上月末是最近的一次項目實際,任務來的急時間又少,還好在加班加點後還是完成了任務,並把第二次沒有實現的
學習心得2
問題 學習 很多 draw 體會 老師 應用 要花 差異 1.這節課你學到了什麽? 這節課,通過老師的指導,學會了建立數據庫,並試著輸入了一些數據! 2.有哪些心得體會? 我感到自己對軟件的熟悉程度不夠,加上打字速度慢,錄入數據需要花費的時間很長,所以我要好好改進這些方面的
<軟件工程導論>學習心得2
人性化 題目 心得 bsp 最新 部分 排隊 任務 人性 這周我們主要完成實驗內容,我們小組選定的題目是電影院售票系統,因為我們都覺得傳統電影院售票窗口效率太低,人們往往要浪費大量的時間在排隊上面,而且觀看座位都是人工安排,無法體現人性化選擇。為了讓人們更高效的買到票,更快
shell指令碼除錯心得
1 將指令碼產生的結果檔案和臨時檔案放入自己的資料夾下,不要放在原來的地方,好一起檢視 2 在除錯的時候,可以吧臨時檔案的刪除命令註釋掉,檢視臨時檔案具體的生成形式 3 在除錯的不明白的地方 用echo $var 4 用日誌txt,儲存echo的記錄和錯誤記錄 sh /xusywap.s
STM32F103C8t6和MCP2515CAN除錯心得
前言 由於STM32微控制器自帶CAN控制器,所以STM32和MCP2515 CAN控制器聯合使用的場景不多。正好一個特殊的需求使用了MCP2515和STM32,在這裡說一下硬體連結需要注意的地方。 1.硬體 主控晶片STM32F1
ADF4351原理圖PCB電路設計,使用經驗和建議 ——【電路模組使用心得2】
照列先上原理圖和PCB(使用的AD軟體設計),原理圖上備註詳細說明,也建議大家養成這個好習慣,發現問題就及時記錄,因為很多時候當時明白,可是過段時間就忘記了~~~~ PCB也是採用的3D封裝,看著舒服,嘻嘻,絲印基本加好,方便除錯焊接,設計完之後一定要記得通過
js斷點除錯心得總結
js斷點除錯心得 1.斷點除錯是啥?難不難? 進入工作中,才知道了斷點除錯是多麼的重要,作為一名程式設計師,必須要學會熟練使用除錯工具,斷點除錯就是經常用到的,斷點除錯其實並不是多麼複雜的一件事,簡單的理解無外呼就是開啟瀏覽器,開啟sources找到js檔案,在行號上點一下罷了
對計算機網路學習的一點心得2之對心得1的辨證學習
對於上一篇博文“計算機網路學習的一點心得1”,我不知道有多少是對了,又錯了多少,也許整篇博文,除了OSI的各層名稱寫對了外,其餘的便全是錯的。 經過一段時間的專案中的對HTTP協議的使用,讓我對網路協議的分層有了一點點的感覺和理解 —— 在網路傳輸中,除了應用層的協議的資料格式有差別,應用層以下
STM32 低功耗 除錯心得
MCU在進入STOP模式的時候,GPIO的狀態都是保持在進入低功耗模式之前的狀態,在最小系統中,MCU的GPIO都是懸空的,所以設定為何種狀態都不會影響到功耗。但當連線到外設後,外設的電平狀態和所連線的GPIO不一致的時候,就會產生電流。也就是所謂的漏電流! 解決辦法:將GPIO的對應GPI
除錯心得
主要記錄對做基於stm32F103自平衡小車除錯時候的一些深刻感悟(以後會繼續更新) 1.寫完MPU6050時,測資料資料顯示一次(或者一直為零)然後就不動了。 發現這個問題後,我先是除錯程式碼發現是dmp庫中的dmp_read_fifo(gyro, accel, quat, &se
Windbg程式除錯系列2-記憶體洩露問題
上篇文章給大家解釋了Windbg的基本命令和說明,這一篇給大家介紹記憶體洩露場景的問題分析。 文章大綱: 描述問題背景和現象 確定問題是否是記憶體洩露 梳理問題分析思路 動手分析解決 總結 1. 先說問題背景:生產環境IIS站點,執行一段時間後,w3wp程序記憶體會漲到2G,同時記憶體不
使用 nghttp2 除錯 HTTP/2 流量
提醒:本文最後更新於 689 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 在本站之前的文章中,我介紹過兩種檢視 HTTP/2 流量的方法:1)在 Chrome 位址列輸入 chrome://net-internals/#http2,使用 Chrome 自帶的 HTTP/2 除錯工具;2)
使用 Wireshark 除錯 HTTP/2 流量
提醒:本文最後更新於 447 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 我們知道,HTTP/2 引入了二進位制分幀層(Binary Framing),將每個請求和響應分割成為更小的幀,並對它們進行了二進位制編碼。與此同時,HTTP/2 沿用了之前 HTTP 版本中的絕大部分語義,上層應用基
DataTables 控制元件使用和心得 (2)
什麼是DataTables引數(Options) 上篇我們說了,DataTables控制元件的載入函式dataTable()一般都有一個物件引數,這個物件引數就是整個DataTables控制元件的引數(Options),通過定義這個引數中的各種屬性,來靈活控制DataTable的初始效果. 樣例程式碼如下:
AM437x AM335x gpio驅動除錯心得
#include <linux/init.h> #include <linux/module.h> #include <linux/leds.h> #include <linux/io.h> #include <linux/