BeagleBone Black–ESP8266 UDP 服务

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:

今天到此为止。

时间: 2024-10-08 17:50:39

BeagleBone Black–ESP8266 UDP 服务的相关文章

nodejs中UDP服务的构建

nodejs中UDP服务的构建 by 伍雪颖 server.js var dgram = require('dgram'); var server = dgram.createSocket("udp4"); server.on("message",function(msg,rinfo) { console.log("Server got: "+msg+" from "+rinfo.address+":"+r

T-Pot平台Honeytrap蜜罐TCP/UDP服务攻击探测及实现自动化邮件告警

T-pot平台的Honeytrap可观察针对TCP或UDP服务的攻击,作为一个守护程序模拟一些知名的服务,并能够分析攻击字符串,执行相应的下载文件指令,当不产生TCP或者UDP协议的时候Honeytrap捕获不到任何信息,但有攻击者试图使用一些安全工具进行扫描的时候,Honeytrap即可捕获到连接信息.将Dashboard更换到Honeytrap模式,如下图所示 Honeytrap的日志记录保存在/data/honeytrap/log/attacker.log中

python创建udp服务端和客户端

1.udp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 8888 6 BUFSIZ = 1024 7 ADDR = (HOST, PORT) 8 9 udpSerSock = socket(AF_INET, SOCK_DGRAM) 10 udpSerSock.bind(ADDR) 11 12 while True: 13 print('waiting for message...'

【Network】高性能 UDP 服务应该怎么搞?

参考资料: Netty系列之Netty高性能之道 C++高性能服务框架revover:rudp总体介绍(可靠UDP传输) - zerok的专栏 - 博客频道 - CSDN.NET 高性能异步Socket服务器(UDP) - 百科教程网_经验分享平台[上学吧经验教程频道] HP-Socket首页.文档和下载 - 高性能 TCP/UDP/HTTP 通信框架 - 开源中国社区 高性能异步Socket服务器(UDP) 详谈高性能UDP服务器的开发 | 学步园 详谈高性能UDP服务器的开发 - 玄冬 -

python socket编程 ,tcp,udp服务端客户端创建

转自http://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 下面讲的是Socket模块功能 1.Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编号

udp 服务端 | udp 客户端 --循环发消息

# ### udp 循环发消息 服务端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 绑定地址(在网络上注册该主机,让别人找到你) sk.bind( ("127.0.0.1",9000) ) while True: msg,cli_addr = sk.recvfrom(1024) print(cli_addr) print(msg.decode("utf-8")) message = input

一个关于UDP socket服务端接收长度不正确的问题

最近项目需要实现一个通过UDP协议和远端服务平台通讯的需求,简要描述如下: 本端为嵌入式linux路由器(udp客户端,linux C编码),远端为租用的阿里云服务器(udp服务端,java编码), 通信协议为UDP,本端会定时向远端服务器发送消息. 在实现和调试过程中发现一个问题: 1)将远端服务程序放在实验室pc机上调试没有问题,即"路由器-PC"交互正常. 2)将远端服务程序放至阿里云服务器上运行,结果服务端收到的udp消息会多出4个字节,偶尔还会多出6个,多出的字节是 EF B

【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 推荐 前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty4(Netty5已经被取消开发了:详见此文). 本文将演示的是一个基于Netty4的UDP服

TCP/IP网络编程 学习笔记_7 --基于UDP的服务端/客服端

理解UDP UDP套接字的特点:在笔记2中讲套接字类型有提,类似信件或邮件的传输.UDP在数据传输过程中可能丢失,如果只考虑可靠性,TCP的确比UDP好.但UDP在结构上比TCP更简洁.UDP没有ACK,SEQ那样的操作,因此,UDP的性能有时比TCP高出很多.编程中实现UDP也比TCP简单.另外,虽然UDP是不可靠的数据传输,但也不会像想象中那么频繁地发生数据丢失.因此,在更重视性能而非可靠性的情况下(如传输视频,音频时),UDP是一种很好的选择.而如果是传递压缩文件则必须要用TCP,因为压缩