BeagleBone Black– 智能家居控制系统 LAS - 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(向广播地址 192.168.0.255 端口 4000发送):

今天到此为止。
我在这群里,欢迎加入交流:
开发板玩家群 578649319
硬件创客 (10105555)
BeagleBone Black– 智能家居控制系统 LAS - ESP8266 UDP 服务的更多相关文章
- Beaglebone Black– 智能家居控制系统 LAS - 网页服务器 Node.js 、Web Service、页面 和 TCP 请求转 UDP 发送
上一篇,纯粹玩 ESP8266,写入了 init.lua 能收发 UDP.这次拿 BBB 开刀,用 BBB host 一个 web server ,用于与用户交互,数据来自 ESP8266 的 UDP ...
- Beaglebone Black – 智能家居控制系统 LAS - 插座组装
上一篇完成了服务端,这次是拼图的最后一块,插座. 插座一个,准备废掉它其中一个插头 预想电路草图 物料清单: 两路插座一个 继电器一个,3.3V 能驱动即可: 交流转直流 3.3V,我买了现成的模块: ...
- Beaglebone Black– 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号
用 Windows 来刷 ESP8266 固件有很多中文教程,来试试直接用 BBB 刷吧.目标是 NodeMCU,ESP-01 可用,就是我买的那个. 接线方式在上一篇.当 echo ‘BB-UART ...
- Beaglebone Black–智能家居控制系统 LAS - 用 UART 连接 ESP8266 (ESP-01 版)
这是一块便宜 (¥12.5)的 WiFi 模块,3.3V ,芯片是乐鑫科技(Espressif)出品.它本身是很多玩法,比如这个 NodeMCU (淘宝有套件焊接好一整套的带 USB 接口的,搜 es ...
- Diy智能家居-1.基于esp8266的语音控制系统(开篇)
目录Diy智能家居-1.基于esp8266的语音控制系统(开篇) https://blog.csdn.net/arno1988/article/details/82628589 Diy智能家居-2.基 ...
- 智能家居-3.基于esp8266的语音控制系统(软件篇)
智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...
- 智能家居-2.基于esp8266的语音控制系统(硬件篇)
智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...
- 智能家居-1.基于esp8266的语音控制系统(开篇)
智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) apache-apollo安 ...
- 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)
基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...
随机推荐
- 微软Sql server analysis service数据挖掘技术
最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解.所以借着项目需求这股东风 ...
- Android扫描文件
扫描文件及文件夹 package com.bwie.demo; import java.io.File; import java.io.FileFilter; import java.util.Arr ...
- android 项目学习随笔十九(MD5)
import java.security.MessageDigest; public class MD5Encoder { public static String encode(String str ...
- nginx源码安装
1,首先解决系统环境: 安装rpm包组{CentOS6 跟开发相关的包组:} a. Development Tools #yum groupinstall "Development Too ...
- PHP实现单例模式
<?php /** * [单例模式] * 总结:防止外部new对象:防止子类继承:防止克隆. */ header("Content-type: text/html; charset=u ...
- 在Oracle 中使用CONNECT BY PRIOR START WITH 语句详解
语法:connect by 是结构化查询中用到的,其基本语法如下: start with,connect by主要目的:从表中取出树状数据.可以假想成表中存成的各条数据是分别是树中的一个结点. sel ...
- 【转】详细讲解Java中log4j的使用方法
转载地址:http://www.233.com/Java/zhuangye/20070731/142625631.html 1.Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 ...
- IE6下 input 背景图滚动问题及标签规范
ie6 背景图滚动问题: <title>ie6下input背景图滚动问题</title> <style> .box{ height:20px; width:300p ...
- MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)
设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...
- Bone Collector II
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...