nodemcu随笔(esp8266 wifi)

nodemcu

by HYH | 2017 年 6 月 16 日 下午 8:11

一.固件刷写

http://www.cnblogs.com/yangfengwu/p/6247048.html

官方网站:http://www.nodemcu.com

参考资料:https://github.com/wangzexi/NodeMCU-Tutorial

硬件资料(相关USB转串口驱动在divers/下):

https://github.com/nodemcu/nodemcu-devkit

https://github.com/nodemcu/nodemcu-devkit-v1.0

二.串口调试

下载串口调试工具(百度),打开连接nodemcu的串口。就可以像操作终端一样操作nodemcu了。

注意事项:

1.每一句lua语句要以回车或者英文分号结束,否则不会执行。

2.除打印的字符(双引号内的字符)外,其他的均为英文字符,由于博客限制,所有的英文符号在显示时均变为了中文符号,需要手动修改所有的符号。

三.脚本编写。

1.sdk(用于查看api)

https://nodemcu.readthedocs.io/en/master/en/support/

2.创建wifi并测试http。

lua脚本(wifi名:nodemcu wifi密码:12345678):

wifi.setmode(wifi.SOFTAP)

 cfg={}

 cfg.ssid=”nodemcu”

 cfg.pwd=”12345678″

 wifi.ap.config(cfg)

srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on(“receive”,function(conn,payload) print(payload) conn:send(“<h1> Hello, NodeMcu.</h1>”)end) end)

测试结果:

连上wifi后:

2.GPIO测试

lua脚本(低电平有效):

wifi.setmode(wifi.SOFTAP)
cfg={}
cfg.ssid=”nodemcu”
cfg.pwd=”12345678″
wifi.ap.config(cfg)
led1 = 1
led2 = 2
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on(“receive”, function(client,request)
local buf = “”;
local _, _, method, path, vars = string.find(request, “([A-Z]+) (.+)?(.+) HTTP”);
if(method == nil)then
_, _, method, path = string.find(request, “([A-Z]+) (.+) HTTP”);
end
local _GET = {}
if (vars ~= nil)then
for k, v in string.gmatch(vars, “(%w+)=(%w+)&*”) do
_GET[k] = v
end
end
buf = buf..”<center> <h1> ESP8266 Web Control GPIO(GPIO1,GPIO2)</h1> </center>”;
buf = buf..”<p>D1:<a href=\”?pin1=ON\”>ON</a> <a href=\”?pin1=OFF\”>OFF</a></p>”;
buf = buf..”<p>D2:<a href=\”?pin2=ON\”>ON</a> <a href=\”?pin2=OFF\”>OFF</a></p>”;
local _on,_off = “”,””
if(_GET.pin1 == “ON”)then
gpio.write(led1, gpio.LOW);
elseif(_GET.pin1 == “OFF”)then
gpio.write(led1, gpio.HIGH);
elseif(_GET.pin2 == “ON”)then
gpio.write(led2, gpio.LOW);
elseif(_GET.pin2 == “OFF”)then
gpio.write(led2, gpio.HIGH);
end
client:send(buf);
client:close();
collectgarbage();
end)
end)

3.定时器测试

lua代码(每五秒打印字符):

tmr.register(0,5000,tmr.ALARM_AUTO,function(t) print(“timer0 reached”) end)
tmr.start(0)

停止定时器:

tmr.stop(0)

4.串口操作(uart)

直接写串口(使用默认串口配置,如需改变使用uart.config()):

uart.write(0,”hello world\n”)

–写字符串

uart.write(0,102)

–写数字

使用回调处理串口(会使调试串口异常,断电或输入quit即可恢复):

— when ‘\r’ is received.
uart.on(“data”, “\r”,
function(data)
print(“receive from uart:”, data)
if data==”quit\r” then
uart.on(“data”) — unregister callback function
end
end, 0)

Linux下,USB转串口的设备通常是 /dev/ttyUSBN(N为整数)。使用cat命令和echo命令即可做到简单的使用。

首先打开两个终端(一个用于读,另一个用于写):

读终端:

cat  设备

写终端(echo的内容用单(双)引号括起来):

echo 发送到串口的内容   > 设备

也可以在一个终端上用,只需要在cat命令后加一个&,使其在后台运行即可,只是这样Shell的输出将和串口输出混在一起。为了分清,可在串口输出结束后按enter使提示符出现。

5.adc(模数转换)

注意事项:

1.基准电压是3.3V而不是5V,引脚是A0

2.固件必须有adc这个模块(本文中2016没有这个模块)。

打印adc转换结果:

print(adc.read(0));

网页显示结果脚本:

wifi.setmode(wifi.SOFTAP)
cfg={}
cfg.ssid=”nodemcu”
cfg.pwd=”12345678″
wifi.ap.config(cfg)
led1 = 1
led2 = 2
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on(“receive”, function(client,request)
local buf = “”;
local _, _, method, path, vars = string.find(request, “([A-Z]+) (.+)?(.+) HTTP”);
if(method == nil)then
_, _, method, path = string.find(request, “([A-Z]+) (.+) HTTP”);
end
local _GET = {}
if (vars ~= nil)then
for k, v in string.gmatch(vars, “(%w+)=(%w+)&*”) do
_GET[k] = v
end
end
A0  = string.format(“<p>A0=%d </p>”,adc.read(0))
buf = buf..”<center> <h1> ESP8266 Web Control GPIO(GPIO1,GPIO2)</h1> </center>”;
buf = buf..”<p>D1:<a href=\”?pin1=ON\”>ON</a> <a href=\”?pin1=OFF\”>OFF</a></p>”;
buf = buf..”<p>D2:<a href=\”?pin2=ON\”>ON</a> <a href=\”?pin2=OFF\”>OFF</a></p>”;
buf = buf..A0
local _on,_off = “”,””
if(_GET.pin1 == “ON”)then
gpio.write(led1, gpio.LOW);
elseif(_GET.pin1 == “OFF”)then
gpio.write(led1, gpio.HIGH);
elseif(_GET.pin2 == “ON”)then
gpio.write(led2, gpio.LOW);
elseif(_GET.pin2 == “OFF”)then
gpio.write(led2, gpio.HIGH);
end
client:send(buf);
client:close();
collectgarbage();
end)
end)

6.nodemcu实现telnet服务器(实现远程控制)

1)注意事项

由于固件限制,不能多开tcp服务器(即使用telnet服务时不能使用http服务)。

文件名保存为init.lua时才会自动加载,否则需要手动启动(dofile(“文件名”))。

原官方脚本兼容linux下的telnet,如果本脚本要在linux下使用,命令输入完成后,需要多按一下Enter。

2)代码:

wifi.setmode(wifi.SOFTAP)
cfg={}
cfg.ssid=”nodemcu”
cfg.pwd=”12345678″
wifi.ap.config(cfg)
s=net.createServer(net.TCP,180)
cmd=””
s:listen(23,function(c)
function s_output(str)
if(c~=nil)
then c:send(str)
end
end
node.output(s_output, 0)
— re-direct output to function s_ouput.
c:on(“receive”,function(c,l)
cmd=cmd..l
if(l==’;’ or l==”\r\n”)
then
node.input(cmd)
cmd=””
end
–like pcall(loadstring(l)), support multiple separate lines
end)
c:on(“disconnection”,function(c)
node.output(nil)
–unregist redirect output function, output goes to serial
end)
print(“Welcome to NodeMcu world.”)
end)

文件下载:inittelnet

3)测试

连上nodemcu的wifi热点后,在windows的cmd窗口中输入(使用本页所使用的固件的命令)

telnet  192.168.4.1

然后按回车即可开始输入命令(不具有退格功能,输入只能重输。出现>即可输下一条命令)

4)telnet客户端C源码(用于二次开发)

编译命令(MSYS2):

gcc -static libtelnet.c telnet.c  -o telnet

文件简介:

libtelnet.c libtelnet.h:libtelnet库

telnet.c:主程序所在文件

telnet

使用方法:

telnet程序路径 ip地址 端口

7.I2C使用

使用的是nodemcu-flasher自带的固件,下载nodemcu-flasher直接点flash烧录即可。

1)简单配置

使用I2C需要先配置I2c的gpio口(可自定义变量名,不过需要同时修改后面的指令)

id=0; (一般是0);

sda=1 ; (可根据实际情况修改)

scl=2; (可根据实际情况修改)

初始化i2c

i2c.setup(id, sda, scl, i2c.SLOW);

测试写(以PCF8591的DA为例,A0=A1=A2=0):

i2c.start(id);  //发起起始信号

i2c.address(id,地址, i2c.TRANSMITTER); //写设备地址(注意是高7位,比如PCF8591本来是0x90/0x91,但这里要写0x48)

i2c.write(id, 值);//写第一个值,按pcf8591用法,此次写的是片内控制寄存器

i2c.write(id, 值);//写第二个值,此时才是DA转换的数值

i2c.stop(id);//停止信号

测试读(以PCF8591的AD为例,A0=A1=A2=0):

i2c.start(id); //开始信号

i2c.address(id, 地址, i2c.TRANSMITTER);//设置地址

i2c.write(id, 值);//写控制寄存器

i2c.stop(id);//停止信号

i2c.start(id);//开始信号

i2c.address(id, 地址, i2c.RECEIVER);//设置地址

c=i2c.read(id, 1);//读一个字节并保存到C这个变量

i2c.stop(id);//停止信号

print(string.byte(c));//打印C的值

下面是一个用网页控制pcf8591的示例。

由init.lua与prf8591.lua组成,需要同时写到板子上。

prf8591封有3个函数。

分别是

init()

read()

write()

参数中addr为地址,con为控制寄存器内容,val为输出值。

prf8591

备用地址:https://github.com/HEYAHONG/nodemcu-firmware/tree/old-master/lua_modules/pcf8591

8.利用redis模块实现远程指令推送

1)条件

有一台redis数据库服务器,且有客户端使用redis的publish指令。

下载redis模块并下到nodemcu里:https://github.com/nodemcu/nodemcu-firmware/tree/master/lua_modules/redis

备用下载:https://github.com/HEYAHONG/nodemcu-firmware/tree/old-master/lua_modules/redis

2)lua编写

连接wifi

wifi.setmode(wifi.STATION)
wifi.sta.config(“SSID”,”密码”)

while(wifi.sta.getip() ==nil)
do
end
print(wifi.sta.getip()) //打印信息,可删除

连接redis

local redis = dofile(“redis.lua”).connect(‘服务器ip地址’,端口)

注册subscribe响应函数:

redis:subscribe(“频道”, function(channel, msg)
print(channel, msg) //打印信息,可删除
node.input(msg) //将获取到的信息执行
end)

redis

3)使用

启动nodemcu确认已连上热点(可连接到服务器)

登入redis:

publish 频道 ‘推送的命令’

redis测试版:

redis for windows

4)使用redis发送数据:

注意同一个连接只能使用一个功能,如果已经使用接收功能,需要新建一个连接(简单来说,就是新定义一个redis变量(以redis1为例))。

变量名=dofile(“redis.lua”).connect(‘IP地址’,端口);

变量名:publish(“频道”,”内容”);

发送的内容可在另一客户端接收。

注意由于redis库的bug,有很小可能无法发送带空格的字符串(会被截断)。

采用以下代码可把串口输出发送出去:

node.output(function(res) 变量名:publish(“频道”,res) end,X);

其中当X为1时,打开串口输出,为0时,关闭串口输出。

https://hyhsystem.cn/wordpress


Copyright ?2018 何亚红的博客 unless otherwise noted.

原文地址:https://www.cnblogs.com/HEYAHONG/p/8379153.html

时间: 2024-10-17 15:08:58

nodemcu随笔(esp8266 wifi)的相关文章

esp8266 wifi模块刷nodemcu固件并蓝牙串口调试

esp8266 wifi模块价格十分实惠.出厂是默认带AT指令的系统,通过串口使用at命令进行交互.但是可以刷别的固件,例如nodemcu. nodemcu可以用lua脚本控制模块,而且lua脚本的优势是非常容易编写,也不需要编译.本文简单的介绍一下在esp8266模块上烧写nodemcu固件,并简单的通过串口让模块接入AP. 下载nodemcu_flasher64bit.exe  这是一个nodemcu固件的烧写软件.我下载的是64为版本.32为版本地址为:http://www.nodemcu

用ESP8266 WIFI模块连接服务器,并实现与服务器相互通讯

最近在做一个智能锁的项目,该项目要求实现在任何地方(当然是要有网络的)可以在手机上用APP开锁.而我负责的部分主要是实现底层与服务器连接,并且要能相互通讯.考虑了很多问题,最终选择了用ESP8266 WIFI模块实现了这个功能.下面向大家就简单分享一下. 工具:网络调试助手  ESP8266  STM32F1开发板 首先,用网络调试助手来虚拟一个服务器,如下: 有了服务器后,接下来我们就要用WIFI来连接这个服务器.ESP8266 有三种工作模式,由于项目要求,我选用了STA中的客户端模式.下面

ESP8266 wifi模块初次试用

前段时间在淘宝随便搜搜"wifi模块",竟然眼前一亮发现有一款价格在15元内的wifi模块:ESP8266. 对其简单的了解: 体积小巧,且多种封装,没有一个硬币大. 价格便宜,十几块钱在wifi模块里面算是最便宜的了. 提供AT指令,这样就可以使用arduino进行控制,实现互联网数据交互. 提供SDK包.烧固件工具,串口烧写固件.这样把arduino作为主控的功能都省了,直接把逻辑写进代码,烧到固件里,就能按我们的业务执行了. 有GPIO口,有SPI功能,有I2C功能,有UART功

ESP8266 wifi干扰、钓鱼实现

说明:绝大部分都是对着下面的参考文章来做的.这里只把基本流程和我自己遇到的问题写一下.如有其他问题可以访问文章末的参考文章进行查找! esp8266模块 我们需要购买一块esp8266模块,如下图所示的这种.有底板,有Micro口.我这块是在某宝上购买的,15不到还包邮,贼划算(本着买来玩玩看的心态). 下载固件到esp8266 在这里需要下载两个东西,分别是Flash下载工具和固件. 工具都在文末的云链接中,请自行下载且安装相应的实验环境. Flash下载工具:flash_download_t

使用USB-TTL调试ESP8266 WIFI模块

一.ESP8266介绍 ??ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266的超低功耗的UART-WiFi模块的模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计. ??模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/R

ESP8266 wifi 模块配置,Wechat+APP控制实现

首先刷入安信可的AiCloud 2.0 SDK文件,AiCloud 2.0具体信息参见AiCloud 1.0 和AiCloud 2.0对比 APP见如下二维码下载. 1.安信可AiCloud 2.0 AT 固件 ai-thinker_esp8266_dout_aicloud_v0.0.0.6_20170517.7z下载 AiCloud 2.0 AT 固件 特性: AiCloud 2.0 安全稳定易用 使用操作简单,任何mcu均可直接接入 512+512map固件 下载地址:ai-thinker_

如何用arduino来测试ESP8266 WIFI模块(wifi普及预热中)

ESP8266是一款非常廉价的WIFI串口解决方案模块,以目前的超低价格受到各方关注,本强最近也在给它开发arduino库,来方便大家使用,不过捏,我们也需要了解下他的AT指令的操作方法.  首先,ocrobot的ESP8266使用的指令集手册在这里:http://www.ocrobot.com/doku.php?id=zh:ocrobot:modules:seed:at大家可以参考,打印或者怎么地.反正到时候经常会用到 AT指令是串口通讯中常用的一种操作指令.大家应该都很熟悉,GPS.短信猫等

ESP8266 nodemcu

主要资料来源于一下几个网站 1.nodemcu官网:此处有几个示例和github(用处不大) 2.用户说明:http://nodemcu.readthedocs.io/en/master/  (非常重要,该文档可以让你了解关于他的所有操作) 简介: nodemcu 使用lua(撸啊)语言编写,支持lua的基本语法(tab什么的).nodemcu在esp8266和es32 cpu内部建立了一个lua环境,这个环境可以支持用户从串口传递脚本给 esp8266内部的lua解释器(封装了io .net.

51采集PCF8591数据通过ESP8266上传C#上位机

效果    如果想用手机做可以参考这篇文章,自己的协议规定在文章中 android 之TCP客户端编程 ---恢复内容开始--- 请问一下博客为什么又不能直接复制粘贴图片了呢............ 先看8266的配置,8266我是用的Lua语言写的,,因为方便快捷....这次写的当然比以前完善...... 关于WIFI模块可以看这几篇 ESP8266使用详解 NodeMCU初探 ESP8266刷AT固件与nodemcu固件 (一)Lua脚本语言入门 (二)Lua脚本语言入门 (三)Lua脚本语