成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

ESP8266 WebServer输出控制


此页面显示如何创建基于ESP8266的Web服务器来控制输出。这 通过使用内置LED作为受控证明方法证明了方法 output.

此代码使用Lolin Nodemcu模块(内置LED开启 引脚4)但您也可以使用任何基于ESP8266的单位。它使用新的 Nodemcu固件 Lua 5.1.4和SDK 2.2.1。闪存到ESP8266中。

ESP8266基于Lolin Nodemcu突破板

lolin nodemcu v3

前面的例子 显示一个简单的代码位,而这一点显示 更有用的框架。


无论如何,原始代码分为3个文件:

  1. 凭据.Lua.
  2. 在里面.lua.
  3. application.lua...

ESP8266 WebServer操作

Credentials.lua文件只有两行 - 这些包含您的SSID和密码。
在里面.lua.文件启动Web界面(这也从重新启动开始)。
应用程序文件包含您的HTML应用程序代码。

WebServer应用程序

ESP8266 WebServer HTML按钮控制LED

基本思想是您在Appation.Lua和HTML代码中编写您的HTML代码 该init.lua是wifi启动/监控/重新启动(带输出 到串行终端)。一旦WiFi起来并且IP地址已经过 分配了,它运行您的HTML应用程序代码。所以你可以尝试 在application.lua中的代码,并留下其他一切(并且知道 that it will work!).

笔记: 检查基本操作注释 dofile("application.lua")。这将让您查看连接 启动到IP分配,到3秒延迟和全面开始。

文件init.lua是lua始终运行的启动启动文件 存在。在该文件中是三秒延迟(见下文) 允许您停止ESP模块发送命令stopWifi()。如果您需要更改一些代码。

否则,ESP模块将继续重新启动,您可以't get access to re-program it. It'如果你没有延迟,那么甚至更糟糕 需要重新闪烁ESP模块。

LED眨眼状态

如果你不'T有一个连接到ESP8266 WebSerber的串行终端 然后没有办法弄清楚正在发生的事情所以我也有什么 添加了另一个文件 shows you what'通过闪烁在不同的LED上进行闪烁 比率 - 下面解释。

  • 空闲和等待连接到路由器:放松闪烁:好的。

  • 连接到路由器等待IP:有点乐观闪烁:好的。

  • 收到IP现在等待3s开始:三重闪电紧急延迟:警告。

  • 错误,重新启动IP连接:双闪光延迟:错误。

  • 经过上述内容后,请关闭:一切都在顺利运行。
笔记: 该代码是进一步下来的。

在我的设置上,WiFi路由器很长的路,所以它有时会得到一个 重新连接请求时遗漏信标警报。 LED闪光灯让您看到 ESP模块重新启动操作。

添加的文件是:

  • LEDBLINKN.LUA.

我还修改了init.lua使用此LED闪存代码拨打电话 在该代码中的战略位置ledblinkn。这意味着你有一些 即使没有串行的ESP8266 WebServer的状态为ESP8266 WebServer的反馈 connection.

ESP8266 WebServer Lua代码操作

ESP8266 WebServer凭据

一旦你掌握了你的凭据,你就不会't need to keep 重新输入他们的不同HTML应用程序,因为 文件存储在ESP8266的内部文件系统中。

它赢了't need 重新更新(如果你不't格式化文件系统)和您写的任何代码 可以使用该文件。它使用内部文件的一种很好的方法 system so you don'T需要重复不同WiFi应用程序的代码。代码从GitHub上的代码调整: 这里.

此文件是微不足道的,但有用包含2行:

SSID.. = "ssid" 密码 = "password"

将上面的代码保存为credentials.lua(更改为SSID和密码)。

提示: 您通常可以在路由器上找到打印的SSID和密码。

ESP8266 WebServer应用程序

这是哪里"you"放置您的申请代码。在下面的例子中 第一组函数执行闪烁操作和底部 一个生成HTML页面。

- esp8266 WebServer - 这允许控制内置的LED - 开/关/闪烁/闪烁关闭。 -- 当地的 卖出=4 当地的 状态 = 错误的 功能 在里面() GPIO.Mode.(卖出,gpio.output.) gpio.write.(卖出,gpio.high.) - LED被拉动如此高=关闭 眨眼间() 结尾 功能 抛弃() 如果 状态==.错误的 然后 gpio.write.(卖出,gpio.high.) 别的 gpio.write.(卖出,gpio.low.) 结尾 状态 = 不是 状态;
结尾 功能 Blkinkon.() 如果 mytimer.〜= 然后 返回 结尾 - 定时器已经打开了。 mytimer. = TMR.CREATE.() mytimer.:警报(200, tmr.alarm_auto., 功能() 抛弃() 结尾) 结尾 功能 眨眼间() 如果 mytimer.==. 然后 返回 结尾 - 定时器已经关闭。 mytimer.:未注册() mytimer.= 结尾 SRV.=Net.Createserver(net.tcp.) 在里面() SRV.:(80,功能(骗子) 骗子:("receive",功能(骗子,有效载荷) 打印(有效载荷) - 查看收到的数据, 功能 受控() 控制 = string.sub.sub.(有效载荷,FND.[2] +1) - 已经已经结束了。 如果 控制 ==. "ON" 然后 gpio.write.(卖出,gpio.low.); 眨眼间() 返回 结尾 如果 控制 ==. "OFF" 然后 gpio.write.(卖出,gpio.high.); 眨眼间() 返回 结尾 如果 控制 ==. "Blink" 然后 Blkinkon.() 返回 结尾 如果 控制 ==. "Blinkoff" 然后 眨眼间() 返回 结尾 结尾 - 从有效载荷控制数据 FND. = {string.find.(有效载荷,"ledbi=")} 如果 #FND. 〜= 0 然后 受控() 结尾 - 有效载荷有数据吗? - 如果是的话,采取行动。 骗子:发送('<!DOCTYPE HTML>\n') 骗子:发送('<html>\n') 骗子:发送('<head><meta http-equiv="content-type" content="text / html; charset = UTF-8">\n') - 缩放视口拟合设备。 骗子:发送('<meta name="viewport" content="宽度=设备宽度,初始标度= 1">') - 标题 骗子:发送('<title>ESP8266 WiFi LED控制</title>\n') - CSS样式定义为提交按钮 骗子:发送('<style>\n') 骗子:发送('input[type="submit"] {\n') 骗子:发送('颜色:#050;宽度:70px;填充:10px; \ n') 骗子:发送('font: bold 84% "trebuchet ms",helvetica,sans-serif; \ n ') 骗子:发送('背景颜色:lightgreen; \ n') 骗子:发送('边框:1PX固体;边界半径:12px; \ n') 骗子:发送('过渡期限:0.4s; \ n') 骗子:发送('}\n') 骗子:发送('input[type="submit"]:hover {\n') 骗子:发送('背景颜色:闪烁; \ n') 骗子:发送('color: white;\n') 骗子:发送('}') 骗子:发送('</style></head>\n') - html body页面内容。 骗子:发送('<body>') 骗子:发送('<h1>Control of nodeMCU<br>(ESP8266-E12)内置LED。</h1>\n') 骗子:发送('<p>用于Nodemcu V3的内置LED在D4上</p>\n') - HTML表单(POST类型)和按钮。 骗子:发送('<form action="" method="POST">\n') 骗子:发送('<input type="submit" name="ledbi" value="ON" >在LED上建造<br><br>\n') 骗子:发送('<input type="submit" name="ledbi" value="OFF">在LED上建成的转弯<br><br>\n') 骗子:发送('<input type="submit" name="ledbi" value="Blink"> Blink LED<br><br>\n') 骗子:发送('<input type="submit" name="ledbi" value="Blinkoff"> Stop LED Blink</form>\n') 骗子:发送('</body></html>\n') 骗子:("sent",功能(骗子) 骗子:关闭() 结尾)
 
结尾) 结尾)

将上面的代码保存为application.lua

在init.lua中启动Web服务器后,运行应用程序代码。它具有以下功能:

在里面()
- 初始化端口以驱动内置LED。
togled()  
- 切换LED的状态(LED ON输出为低电平)。
blinkoff() - 关闭并取消注册闪烁计时器。
受控()
- 解码有效载荷内的数据以控制LED。

这条线:

   srv = net.createserver(net.tcp)

.. .创建TCP传输控制协议服务器。
 
   SRV:听(80,功能(Conn)

.. .设置服务器以侦听HTML数据的端口80:

   conn:on("receive",函数(conn,payload)。

通过参数'conn' & 'payload'esp8266在端口80上收到数据时的内联功能

激活内联函数,检查有效载荷是否有 string 'ledbi='内部 - 如果它确实如此,则控制功能 用于控制LED。使用的数据是字符串后面的数据 'ledbi='在此字符串之后可用到结尾 payload.

其余部分函数备份浏览器可以显示的HTML页面

线路

   <meta name="viewport" content="宽度=设备宽度,初始标度= 1">

.. 允许浏览器或移动设备显示合理的尺寸尺寸的页面i.e.它将其缩放到视口中。

评论后的CSS样式

   - CSS样式定义为提交按钮
 
.. .用于样式尺寸A和圆角和LightGreen背景的提交按钮。

截止部分:

   - HTML表单(POST类型)和按钮。

是按钮定义的位置<form>部分和在每个按钮按下的值的位置和位置。

ESP8266 WebServer LeDBlinkn.

当地的 LEDPIN. = 4 当地的 LEDSTATE. = 错误的 当地的 n = 0 当地的 _nstart. = 0 当地的 _togdelay. 当地的 _间隔 当地的 眨timer. = TMR.CREATE.() 当地的 眨Interval. = TMR.CREATE.() GPIO.Mode.(4,gpio.output.) gpio.write.(LEDPIN.,gpio.high.) - 高于内置LED的高电平。 - 在开关之间的延迟延迟时闪烁n次,然后等待间隔 - 重复 功能 LEDBLINKN.(numtog.,Togdelay.,间隔) - 绕过没有静态 如果 眨timer.:状态() 〜= 然后 LEDBLINKSTOP.() 结尾 - 如果先前启动了停止。 _nstart. = numtog. _togdelay. = Togdelay. _间隔 = 间隔 tointerval.() 结尾 功能 LEDBLINKSTOP.() 如果 眨timer.:状态() 〜= 然后 眨timer.:未注册() 眨Interval.:未注册() 结尾 gpio.write.(LEDPIN.,gpio.high.) LEDSTATE. = 错误的 n = 0 结尾 功能 toggleledbuiltin() 如果 眨timer.:状态() 〜= n <=0 然后 眨timer.:未注册() 返回 结尾 如果 (LEDSTATE.) 然后 gpio.write.(LEDPIN.,gpio.low.) 别的 gpio.write.(LEDPIN.,gpio.high.) - 高于内置LED的高电平。 n = n -1 结尾 LEDSTATE. = 不是 LEDSTATE. 结尾 - 快速切换 功能 LEDBLINKNSTART.() n = _nstart. - 初始化切换号码 眨timer.:警报(_togdelay., tmr.alarm_auto., 功能 () toggleledbuiltin() 结尾) 结尾 - 间隔计时器 功能 tointerval.() LEDBLINKNSTART.() - 在间隔之前从LED切换开始 眨Interval.:警报(_间隔, tmr.alarm_auto., 功能 () LEDBLINKNSTART.() 结尾) 结尾 - 测试 -ledblinkn_setnumblinks(50,4) - lexblinkn(3,50,1500)

将上面的代码保存为LEDBLINKN.LUA

LEDBLinkn代码具有以下功能:

LEDBLINKN(NUMTOG,
Togdelay,间隔)
- 用户代码为stat一个闪烁。 numtog是 初始开/关闪烁的数量。 togdelay定义了开启和关闭 时期。间隔定义直到重新启动序列的时间。 多个闪光,然后是间隔延迟。该操作持续到 通过LEDBLINKSTOP()停止或使用LEDBLinkn()重置为不同的序列。
LEDBLINKSTOP()
- 停止眨眼焦点。
toggleledbuiltin() - 切换内置LED。
LEDBLINKNSTART()
- 这是快速闪存定时器 - 代码闪烁LED n次。
tointerval()
- 这个时间间隔次调用 延迟后LEDBLINKNSTART。它还调用LEDBLinknstartAtt 开始,所以你在序列开始时得到的东西。

典型的例子是

   LEDBlinkN(3,50,550)

这与第50 * 2 * 3 = 300ms的时期创建3个开/关闪烁,但也是如此 启动550ms延迟的间隔计时器 - 这是总时间 序列所以Numtog * togdelay必须小于间隔 - 如果不是这种情况,您可以更新代码以打印rero。

这给出了3个快速闪光的闪烁,然后是 延迟并用于警告3秒的超时。

对于偶数m:s使用:

   LEDBlinkN(1,100,200)

在100ns和OFF 100 ms,总间隔时间200ms。

ESP8266 WebServer Init.

我修改了init.lua略微向您提供停止的功能 上电后的Web服务器(那里'是一个3秒的窗口允许这个 - 没有明显的方法来阻止它)。[你也可以使用wifi.sta.disconnect()]

- nodemcu_test_startup. - 负载凭据,'SSID' and 'PASSWORD'在那里宣布并初始化 做file.("credentials.lua") 做file.("LEDBlinkn.lua") 功能 启动() 如果 file.open.("init.lua") ==. 然后 打印("init.lua删除或重命名") 别的 打印("Running") file.close.("init.lua") LEDBLINKSTOP.() file.close.("LEDBlinkn.lua") - 实际应用程序存储在'application.lua' 做file.("application.lua") 结尾 结尾 - 定义WiFi站事件回调 wifi_connect_event. = 功能(T) 打印("Connection to AP(".. T.SSID... ") established!") 打印("等待IP地址......") 如果 disconnect_ct. 〜= 然后 disconnect_ct. = 结尾 LEDBLINKN.(1,100,200) - 更快闪烁 结尾 wifi_got_ip_event. = 功能(T) - 注意:具有IP地址并不意味着有互联网访问! - 可以使用net.dns.resolve()确定Internet连接。 打印("WiFi连接准备好了! IP地址是:".. 提示) 打印("启动将暂时恢复,您有3秒钟中止。") 打印("Waiting...") 羚羊 = TMR.CREATE.() - JFM Mod允许中止 羚羊:警报(3000, tmr.alarm_single., 启动) LEDBLINKN.(3,50,550) - 快速警告3,延迟 结尾 功能 停止wifi.() - JFM. LEDBLINKSTOP.() 羚羊:停止() 羚羊:未注册() 结尾 wifi_disconnect_event. = 功能(T) LEDBLINKN.(2,100,700) - 带延迟=错误的双倍闪存 如果 T.Reason. ==. wifi.Eventmon.Reason.Assoc_leave. 然后 - 电台已从先前连接的AP中解剖 返回 结尾 - Total_Tries:该站将尝试连接到AP的次数。应该考虑ap重启持续时间。 当地的 Total_tries. = 75 打印("\ nwifi连接到ap(".. T.SSID... ") has failed!") - 这些可能的断开原因很多,以下迭代 - 列表并返回与断开连接原因对应的字符串。 为了 钥匙, (wifi.Eventmon.Reason.) 如果 ==. T.Reason. 然后 打印("Disconnect reason: ".. .. "(".. 钥匙.. ")") 休息 结尾 结尾 如果 disconnect_ct. ==. 然后 disconnect_ct. = 1 别的 disconnect_ct. = disconnect_ct. + 1 结尾 如果 disconnect_ct. < Total_tries. 然后 打印("重试连接......(尝试".. (disconnect_ct.+1).." of ".. Total_tries... ")") 别的 wifi.sta.disconnect.() 打印("中止与AP的连接!") disconnect_ct. = 结尾 结尾 - 注册WiFi站事件回调 wifi.Eventmon.register.(wifi.eventmon.sta_connected., wifi_connect_event.) wifi.Eventmon.register.(wifi.eventmon.sta_got_ip., wifi_got_ip_event.) wifi.Eventmon.register.(wifi.eventmon.sta_disconnected., wifi_disconnect_event.) LEDBLINKN.(1,200,400) - 闲置的 打印("连接到WiFi接入点......") wifi.setMode.(wifi.station.) wifi.sta.config({SSID..=SSID.., PWD=密码}) - wifi.sta.connect()未必要,因为config()默认使用auto-connect = true

将上面的代码保存为init.lua

上面的代码是事件驱动编程的一个非常好的例子(来源 这里)

LEDBLINKN()函数使用该函数显示WiFi连接状态 内置LED。此外,您可以在3中使用函数stopwifi() 第二延迟时间来停止init.lua。您也可以删除init.lua 从esp8266文件中的文件进行操作(使用 the esplorer. 界面)除了闪烁的LED之外将继续闪烁。

关于上述代码的其他有用的事情是它会告诉你 为什么连接失败,所以您将发送到串行终端的大量信息。

<<<回到Lua的例子

新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


ezoic.报告此广告

访问我们的Facebook页面:

   点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino.模拟输出...易模拟输出生成

    arduino.模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你 so so so much
对于所有信息
你 have provided in
你r site it's

高超极好的."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
镭_tr.<at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你rweb site.

非常有用,揭开,
诚实明确。

非常感谢
你r time and works.
问候。"


- Anon.

回到顶部