ESP 8266 nodemcu 入過(guò)的坑

ESP8266 真是很強(qiáng)大,自己作為一個(gè)wifi模塊 ,同時(shí)也是一塊強(qiáng)大的muc,是一塊可編程的器件,入坑以來(lái),各種資料,各種亂 單是搜集一些資料就有這么多,還沒(méi)有帶個(gè)各種編譯環(huán)境等等


今天就簡(jiǎn)單的梳理一下 。我所知道的分三種,一種AT指令,AT指令基本上僅把8266作為一塊wifi模塊了,用串口輸入AT 命令實(shí)現(xiàn)wifi的連接發(fā)射,tcp和udp的相關(guān)等等,優(yōu)點(diǎn)是簡(jiǎn)單,易懂,很塊就能入門,的缺點(diǎn)就得外掛一個(gè)mcu實(shí)現(xiàn)各種控制,可玩性并不高而且內(nèi)部的資源就浪費(fèi)。第二種是用安信可 ESP 系列一體化開(kāi)發(fā)環(huán)境,這個(gè)優(yōu)點(diǎn)可以接觸底層,很鍛煉人,c語(yǔ)言的開(kāi)發(fā)語(yǔ)言也容易懂,缺點(diǎn)嘛,作為一個(gè)電信狗,Eclipse真的玩不轉(zhuǎn),但是看配置編譯環(huán)境就真的很頭疼!實(shí)在不爽第三就是nodemuc ,用一種新語(yǔ)言lua來(lái)編寫(xiě),優(yōu)點(diǎn)就是編譯環(huán)境基本不用配置,一個(gè)軟件完成一切。

而且提供可定制的固件,真的很是人性化可以按需下載,真的很舒服


github也提供了文檔供你查閱。缺點(diǎn)就是你得學(xué)一門或者說(shuō)用一門新語(yǔ)言來(lái)實(shí)現(xiàn)調(diào)用API.權(quán)衡了一下利弊,最終還是選擇了用lua。開(kāi)始以為這條路會(huì)走的很順利,但是一路心酸??!

? ? 如果你用8266用lua來(lái)編寫(xiě),http://www.cnblogs.com/yangfengwu/p/7513097.html這個(gè)教程相信你一定看過(guò),而且這個(gè)作者也在簡(jiǎn)述里邊發(fā)過(guò)相同的文章http://www.itdecent.cn/p/8cec04ee90e6

就是這個(gè)老哥,真的很是厲害,但是一直跟著他思路走,問(wèn)題越來(lái)愈大。所以最后果斷自己重新整理思路,果然闊然開(kāi)朗。

簡(jiǎn)單說(shuō)一下楊哥一個(gè)client的程序

wifi.setmode(wifi.STATIONAP)

cfg={}

cfg.ssid="Hellow8266"

cfg.pwd="11223344"

wifi.ap.config(cfg)

apcfg={}

apcfg.ssid="qqqqq"

apcfg.pwd="11223344"

wifi.sta.config(apcfg)

wifi.sta.autoconnect(1)

ClientConnectedFlage = 0

TcpConnect = nil

tmr.alarm(1, 1000, 1, function()

if? ClientConnectedFlage == 0 then

Client = net.createConnection(net.TCP, 0)

Client:connect(8080,"192.168.1.103")

Client:on("receive", function(Client, data)

uart.write(0,data)

end)

Client:on("connection", function(sck, c)

ClientConnectedFlage = 1

TcpConnect = Client

print("Link OK")

tmr.stop(1)

Client:on("disconnection", function(sck, c)

ClientConnectedFlage = 0

TcpConnect = nil

tmr.start(1)

end)

end)

if? ClientConnectedFlage == 0 then

print("Link Error")

end

end

end)

uart.on("data",0,function(data)

if? TcpConnect ~= nil then

TcpConnect:send(data)

end

end, 0)

printip = 0

wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)

printip = 0

end)

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)

if printip == 0 then

print("+IP"..T.IP)

end

printip = 1

end)

這個(gè)代碼可以實(shí)現(xiàn)連接wifi后去連接一個(gè)tcp的協(xié)議,但是總是要出現(xiàn)七八次的Link Error,這我可能作為強(qiáng)迫癥,實(shí)在接受了這種,一直在思考問(wèn)題,把楊哥的代碼研究了大半天發(fā)現(xiàn)并沒(méi)什么,開(kāi)始以為是因?yàn)閘ua底層的原因,把github的文檔反復(fù)看了好幾遍還是沒(méi)有有效解決,在將要放棄時(shí)終于找到問(wèn)題所在了。

回到我們編程最開(kāi)始的邏輯,我們先去連接一個(gè)路由器,然后再去connect一個(gè)tcp的服務(wù)器,楊哥程序在反饋link error時(shí)是連接tcp的失敗的時(shí)后反饋錯(cuò)誤連接,當(dāng)時(shí)一直懷疑是 connect 的問(wèn)題,可是連接tcp服務(wù)器做的三次握手時(shí)是一個(gè)很快的時(shí)間所以在懷疑2天后果斷換思路,我們平常手機(jī)連接wifi的時(shí)候你可能就會(huì)發(fā)現(xiàn)他的時(shí)間遍比較長(zhǎng),出于這個(gè)我開(kāi)始懷疑也許是8266在還沒(méi)有連接路由器成功的時(shí)候,就去連接了客戶端,所以一直就會(huì)報(bào)錯(cuò),突然思路一下就開(kāi)闊了!

貼上我的代碼

wifi.setmode(wifi.STATION)

apcfg={}

apcfg.ssid="loser2.4"

apcfg.pwd="password"

wifi.sta.config(apcfg)

--wifi.sta.autoconnect(1)

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)

print("\n\tSTA - GOT IP".."\n\tStation IP: "..T.IP.."\n\tSubnet mask: "..

T.netmask.."\n\tGateway IP: "..T.gateway)

print(wifi.sta.getip())

Client = net.createConnection(net.TCP, 0)

print("start")

Client:connect(5001,'192.168.2.239')

Client:ttl(1)

Client:on("receive", function(Client, data)

Client:send("ack") deal_t(data)

end)

end)

function deal_t(data)

if data=="a0"

then gpio.write(4,0)

end

if data=="b0"

then gpio.write(4,1)

end

end



也就說(shuō)我們?cè)谶B接服務(wù)器的時(shí)間應(yīng)該是在獲取了ip之后,所以這個(gè)回調(diào)就很有意思了?。?/p>

所以楊哥代碼邏輯是有些小問(wèn)題的,所有連接服務(wù)器相關(guān)的代碼都應(yīng)該在在這個(gè)函數(shù)后進(jìn)行

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)

print("\n\tSTA - GOT IP".."\n\tStation IP: "..T.IP.."\n\tSubnet mask: "..

T.netmask.."\n\tGateway IP: "..T.gateway)

--處理代碼

end)

終于不再?zèng)]有那么多報(bào)錯(cuò)了!開(kāi)心

最后還是很感謝@楊奉武的代碼!很是厲害的大牛

就先更新到這吧,太累了

晚安

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2017/11/12 by loser

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容