NodeMCU 的文档里面终于发现,ESP8266 的GPIO 2 确实是 PIN 4,GPIO 0 是 PIN 3。

https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_cn

话说,这个 API 不是给地球人看的。按照说明,net.createServer 返回的是 Server,事实上,如果用 UDP,按照里面的代码你死活干不出来的。终于在 www.esp8266.com 论坛里面找到了答案,本篇的内容就是描述 UDP 在 NodeMCU 里面的正确姿势。

接线、BBB 开 UART,和 minicom 相关的,请看上几篇。首先我直接上代码。

LUA 代码

 

init.lua

print('init.lua ver 0.9')
wifi.setmode(wifi.STATION)
print('set mode=STATION (mode='..wifi.getmode()..')')
print('MAC: ',wifi.sta.getmac())
print('chip: ',node.chipid())
print('heap: ',node.heap())
wifi.sta.config('SSID','PWD')
dofile('main.lua')

init.lua 是启动后执行的用户程序代码,wifi 设成 station 模式(另外可以是 AP 模式的),然后设置 SSID 和密码,如果你想试,代码里面的 wifi.sta.config 需要改为正确值。代码的最后一句是让它执行另一个 lua 代码档。

main.lua

print('Connecting...')
tmr.alarm(0, 1000, 1, function()
        if wifi.sta.getip() ~= nil then
        print('IP: ',wifi.sta.getip())
        tmr.stop(0)
        dofile('udp.lua')
        end
end)

这个没什么,每秒钟看一遍是否已经连上了无线路由,如果连上了,就执行另一个代码档。(又一个档案?有点多余是吧,这是我个人癖好,我每个单独测试的)

udp.lua

sv=net.createServer(net.UDP,0)
sv:on('receive', function(c,pl)
        print(pl)
        r=cjson.decode(pl)
        if r.cmd == '0' then
                print('I got a ZERO cmd.')
                c:send('{\"cmd\":\"2\",\"GUID\":\"24F92\",\"dType\":\"powerPlug\"}')
        end
end)
sv:listen(4000)
print('Server started')

关键就是这个 on 方法。你看官方 API,on 是 socket 的方法,不是 server 的。而 net.createServer 按照官方说明,是返回 server 的。就是说,如果按照官方说明,我这代码是错误的。我是看了 http://www.esp8266.com/viewtopic.php?f=24&t=645 这里才知道这“错误”做法…。

上传代码

我代码是用 vim 在 BBB 里面写的,保存在 BBB,然后用 luatool 写入。https://github.com/4refr0nt/luatool。python 而已,git clone 下来就能用,里面还有个 telnet 代码示范。这 luatool 其实是帮我操作 NodeMCU 命令并且转换代码而已。运行时加 –v 参数你就知道它是干嘛的了。

用法是 python luatool.py –p /dev/ttyO2 –b 9600 –f XXX.lua –v

-p 是串口端口,-b 是 baud,-f 是本机的代码档,-v 是显示过程。很明显它只不过调用 NodeMCU 的lua 命令而已,而它最不好的地方是,它会等待 NodeMCU 反应返回字符来判断操作有没有顺利执行。如果你像我一样,有东西在里面跑,有 print 的话,就会出现些错误,因为 print 和这 luatool 的响应混在一起了。

效果

不用 BBB,从 Windows,通过无线路由,直接发 UDP 给 ESP8266,开着 BBB 的 minicom 看看这些 debug (呃,print)信息。我首先发了 cmd: 1 和 2 字符过去,反应正常,也正确 print 了出来。然后 cmd:0,它正确的回传了自己的身份,powerPlug。没错,我准备玩智能插座。

广播一样 no problem(向广播地址 192.168.0.255 端口 4000发送):

今天到此为止。

我在这群里,欢迎加入交流:
开发板玩家群 578649319
硬件创客 (10105555)

BeagleBone Black– 智能家居控制系统 LAS - ESP8266 UDP 服务的更多相关文章

  1. Beaglebone Black– 智能家居控制系统 LAS - 网页服务器 Node.js 、Web Service、页面 和 TCP 请求转 UDP 发送

    上一篇,纯粹玩 ESP8266,写入了 init.lua 能收发 UDP.这次拿 BBB 开刀,用 BBB host 一个 web server ,用于与用户交互,数据来自 ESP8266 的 UDP ...

  2. Beaglebone Black – 智能家居控制系统 LAS - 插座组装

    上一篇完成了服务端,这次是拼图的最后一块,插座. 插座一个,准备废掉它其中一个插头 预想电路草图 物料清单: 两路插座一个 继电器一个,3.3V 能驱动即可: 交流转直流 3.3V,我买了现成的模块: ...

  3. Beaglebone Black– 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号

    用 Windows 来刷 ESP8266 固件有很多中文教程,来试试直接用 BBB 刷吧.目标是 NodeMCU,ESP-01 可用,就是我买的那个. 接线方式在上一篇.当 echo ‘BB-UART ...

  4. Beaglebone Black–智能家居控制系统 LAS - 用 UART 连接 ESP8266 (ESP-01 版)

    这是一块便宜 (¥12.5)的 WiFi 模块,3.3V ,芯片是乐鑫科技(Espressif)出品.它本身是很多玩法,比如这个 NodeMCU (淘宝有套件焊接好一整套的带 USB 接口的,搜 es ...

  5. Diy智能家居-1.基于esp8266的语音控制系统(开篇)

    目录Diy智能家居-1.基于esp8266的语音控制系统(开篇) https://blog.csdn.net/arno1988/article/details/82628589 Diy智能家居-2.基 ...

  6. 智能家居-3.基于esp8266的语音控制系统(软件篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...

  7. 智能家居-2.基于esp8266的语音控制系统(硬件篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...

  8. 智能家居-1.基于esp8266的语音控制系统(开篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) apache-apollo安 ...

  9. 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...

随机推荐

  1. Main函数参数argc,argv说明

    C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv[]) ...

  2. FastJson之有道翻译

    在AndroidMainifast.xml中加入相应的访问权限 <uses-permission android:name="android.permission.INTERNET&q ...

  3. android记住密码和自动登陆

    import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences ...

  4. bootstrap导航条在手机上默认展开二级目录,必须用setTimeout才能实现

    bootstrap导航条在手机上默认展开二级目录,必须用setTimeout才能实现 $(document).ready(function() { $('.dropdown').hover(funct ...

  5. android 常用命令

    1.查看当前手机界面的 Activity   dumpsys | grep "mFocusedActivity" 查看任务栈 dumpsys | grep "Hist&q ...

  6. Virtualbox后台管理之VBoxManage

    Virtualbox是提供了后台启动的.只是不是默认的. 查看有哪些虚拟机 VBoxManage list vms 查看虚拟的详细信息 VBoxManage list vms --long 查看运行着 ...

  7. 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录

    使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录 C#进阶系列——WebApi 异常处理解决方案 [ASP.NET Web API教程]4.3 AS ...

  8. Extended Data Type Properties [AX 2012]

    Extended Data Type Properties [AX 2012] This topic has not yet been rated - Rate this topic Updated: ...

  9. Linux下查看用户列表

    cat /etc/passwd 可以查看所有用户的列表 w 可以查看当前活跃的用户列表 cat /etc/group 查看用户组

  10. VirtualBox启动虚拟机报错0x80004005

    Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 ( ...