索引

这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及。

微信小程序连接物联网(一):初始化ESP8266 NodeMCU
微信小程序连接物联网(二):NodeMCU Lua学习笔记
微信小程序连接物联网(三):微信小程序远程遥控宿舍开门 基于NodeMCU通过MQTT协议连接阿里云物联网平台

上一章是记录esp8266初始化的步骤, 这章记录使用NodeMCU Lua时的学习笔记。记录常见的用法,都是参考官方的api文档的。

最新的模块用法参考官方api文档:
https://nodemcu.readthedocs.io/en/master/

我学习nodemcu lua时看的视频:
b站av22926769
(由于视频与现在新的sdk版本不同,具体用法还得参考官方api文档)

Lua跟Python语法有点类似,很快就能入手,参考菜鸟教程的Lua教程:
菜鸟教程Lua语法

使用ESPlorer,这个是NodeMCU在lua脚本语言下的开发工具(前提要有jdk)


gpio

函数 说明
gpio.mode() 初始化引脚为GPIO模式,设置引脚的IN / OUT方向,以及可选的内部弱上拉电路。
gpio.read() 读取数字GPIO引脚值。
gpio.write() 设置数字GPIO引脚值。

点亮esp8266上的灯

esp8266上的灯默认是与d4口相接,而且是输入低电平时亮起,高电平不亮

pin = 4
gpio.mode(4, gpio.OUTPUT)
gpio.write(4, gpio.LOW)

设置D1口为高电平

pin=1
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, gpio.HIGH)

PWM

函数 说明
pwm.close() 退出指定GPIO引脚的PWM模式。
pwm.getclock() 获取引脚的选定PWM频率。
pwm.getduty() 获取引脚的选定占空比。
pwm.setclock() 设置PWM频率。
pwm.setduty() 设置引脚的占空比。
pwm.setup() 将引脚设置为PWM模式。
pwm.start() PWM启动,波形被施加到GPIO引脚。
pwm.stop() 暂停PWM波形的输出。

设置D1口频率为500Hz 占空比为512

pin = 1
pwm.setup(pin, 500, 512)
pwm.start(pin)
pwm.setduty(pin, 0)  -- 改变D1口占空比为0
pwm.stop()

设置D3口的舵机 转动一定角度3秒后复原

初始化舵机的频率为50HZ,占空比为 40 / 1024。
(控制舵机这段代码不一定正确,但实际使用中测试正常。如果有错误请指出)

pin = 3
pwm.setup(pin, 50, 40)
pwm.start(pin)
tmr.create():alarm(3000, tmr.ALARM_SINGLE, function()pwm.setduty(pin, 120)pwm.stop(pin)
end)

HTTP

执行GET / POST / PUT / DELETE以及自定义请求的接口。
不能使用此模块进行并发HTTP请求,由于ESP8266的内存限制,支持的页面/正文大小受可用内存的限制。尝试接收大于此范围的页面将失败。

每个请求方法都采用一个回调,当从服务器接收到响应时将调用该回调。第一个参数是状态码,它可以是常规HTTP状态码,也可以是-1,以表示DNS,连接或内存不足故障或超时(当前为60秒)。

函数 说明
http.delete() 执行HTTP DELETE请求。
http.get() 执行一个HTTP GET请求。
http.post() 执行一个HTTP POST请求。
http.put() 执行一个HTTP PUT请求。
http.request() 对任何HTTP方法执行自定义HTTP请求。

http.get()

执行一个HTTP GET请求。请注意,不支持并发请求。使用http先确保连上了wifi

句法
http.get(url, headers, callback)
参数

url 要获取的网址,包括http://或https://前缀
headers 要附加的可选附加标头,包括\ r \ n;也许nil
callback 收到响应或发生错误时要调用的回调函数;它被调用,参数status_code,body和headers。如果发生错误,status_code则设置为-1。

返回

nil

http.get("http://httpbin.org/ip", nil, function(code, data)if (code < 0) thenprint("HTTP request failed")elseprint(code, data)end
end)

http.post()

执行一个HTTP POST请求。请注意,不支持并发请求。

句法

http.post(url, headers, body, callback)

参数

url 要获取的网址,包括http://或https://前缀
headers 要附加的可选附加标头,包括\ r \ n;也可以nil
body 必须已经以适当的格式编码,但是可以为空
callback 收到响应或发生错误时要调用的回调函数;它被调用,参数status_code,body和headers。如果发生错误,status_code则设置为-1。

退货

nil

http.post('http://httpbin.org/post','Content-Type: application/json\r\n','{"hello":"world"}',function(code, data)if (code < 0) thenprint("HTTP request failed")elseprint(code, data)end
end)

WIFI

ESP8266支持3种工作模式
分别是”STA”、“AP”、“STA+AP”模式:
① STA模式:该模块通过路由器连接网络,手机或者电脑实现该设备的远程控制.
② AP模式:该模块作为热点,手机或者电脑连接wifi与该模块通信,实现局域网的无线控制
③ STA+AP模式:两种模式共存,既可以通过路由器连接到互联网,也可以作为WiFi热点,使其他设备连接到这个模块,实现广域网与局域网的无缝切换.

功能参考

函数 说明
wifi.getmode() 获取WiFi操作模式。
wifi.setmode() 配置要使用的WiFi模式。
wifi.sta.config() 设置WiFi站配置。
wifi.sta.connect() 在站点模式下连接到已配置的AP。
wifi.sta.disconnect() 在站点模式下与AP断开连接。
wifi.sta.getip() 在工作站模式下获取IP地址,网络掩码和网关地址。
wifi.sta.getmac() 在站点模式下获取MAC地址。
wifi.sta.status() 获取工作站模式下的当前状态。
wifi.eventmon.register() 注册/注销WiFi事件监视器的回调。
wifi.eventmon.unregister() 取消注册WiFi事件监视器的回调。
wifi.eventmon.reason 该表包含断开连接的原因。

例:连接名为f103的wifi

wifi.setmode(wifi.STATION)
station_cfg={}
station_cfg.ssid="f103"
station_cfg.pwd="11111111"
station_cfg.save=false
wifi.sta.config(station_cfg)

例:连接wifi回调事件

-- wifi eventmon
wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T)print("wifi connecting...")
end)wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)ip = wifi.sta.getip()print("wifi connect:" .. ip)
end)wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)print("wifi disconnect:" .. T.reason)
end)

时钟

函数 描述
tmr.create() 创建一个动态计时器对象。
tmr.delay() 在处理器指定的微秒内忙循环。
tmr.now() 返回系统计数器,以微秒为单位。
tmr.softwd() 提供一个简单的软件看门狗,该看门狗需要在其过期之前重新设置或禁用,否则系统将重新启动。
tmr.time() 返回系统正常运行时间,以秒为单位。
tmr.wdclr() 喂系统看门狗。在while(True) 里加入防止MCU自动重启
tmr.create()

创建一个动态计时器对象;参见下面的方法表。

在控制功能中,可以使用动态计时器代替数字ID。也可以以面向对象的方式进行控制。

计时器对象支持的功能:

  • t:alarm()
  • t:interval()
  • t:register()
  • t:start()
  • t:state()
  • t:stop()
  • t:unregister()
参数

没有

返回

timer 宾语

local mytimer = tmr.create()
mytimer:register(5000, tmr.ALARM_SINGLE, function (t) print("expired"); t:unregister() end)
mytimer:start()

计时器对象方法

tobj:alarm()

句法
tobj:alarm(interval_ms, mode, func())

参数
interval_ms 计时器间隔(以毫秒为单位)。最大值是6870947(1:54:30.947)。
mode 计时器模式:

  • tmr.ALARM_SINGLE 一键式警报(无需致电unregister())
  • tmr.ALARM_SEMI 手动重复报警(呼叫start()重新启动)
  • tmr.ALARM_AUTO 自动重复报警

func(timer) 以计时器对象作为参数调用的回调函数

例:手动启动的时钟事件

Connect_timer = tmr.create()
Connect_timer:alarm(2000, tmr.ALARM_SEMI, function()print("test..")
end)Connect_timer:start()

例:一次性的时钟事件,相当于sleep(2000ms)再执行事件

tmr.create():alarm(2000, tmr.ALARM_SINGLE, function()print("test..")
end)

例:一直执行的时钟。

tmr.create():alarm(8000, tmr.ALARM_AUTO, function()print("test..")
end)

微信小程序连接物联网(二):NodeMCU Lua学习笔记相关推荐

  1. 微信小程序连接物联网(三):微信小程序远程遥控宿舍开门 基于NodeMCU通过MQTT协议连接阿里云物联网平台

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  2. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  3. 《微信小程序商城界面设计实战》--学习笔记作业

    一.学习笔记 1.注释:wxml文档注释: css文档注释:/** **/ js文档注释:单行注释以"//"开头:多行注释以"/"开头,以"/&quo ...

  4. 七天学习微信小程序开发(一)—— 学习笔记

    文章目录 前言 目标 第一天 -- 前端配置和编写 微信开发 微信小程序的代码结构 常用标签(wxml) 常用样式(wxss) 界面布局的技术 任务 第二天 -- 深度学习微信前端编写(一) 程序底部 ...

  5. 微信小程序-常用API开发技巧学习笔记

    常用API开发技巧学习笔记 第一章 认识微信小程序 前后端分离的开发方式 小程序的特点 小程序对开发者的影响 学习小程序需要的基础 第二章 小程序环境搭建与开发工具介绍 小程序开发环境 没有小程序号对 ...

  6. 微信小程序 - - 云开发の云函数学习笔记

    前后端分离:前端请求云函数(书写逻辑),后端请求数据库(操作数据) 一.云函数初体验 错误1:Cannot find module 'wx-server-sdk' # getData/index.js ...

  7. 微信小程序连接阿里云物联网平台操控设备(IOT)二

    文章导航: 微信小程序连接阿里云物联网平台操控设备(IOT)一 设备上云 微信小程序连接阿里云物联网平台操控设备(IOT)二 微信小程序开发(一) 微信小程序连接阿里云物联网平台操控设备(IOT)三 ...

  8. 微信小程序连接阿里云物联网平台操控设备(IOT)一

    文章导航: 微信小程序连接阿里云物联网平台操控设备(IOT)一 设备上云 微信小程序连接阿里云物联网平台操控设备(IOT)二 微信小程序开发(一) 微信小程序连接阿里云物联网平台操控设备(IOT)三 ...

  9. 微信小程序连接阿里云物联网平台操控设备(IOT)三

    文章导航: 微信小程序连接阿里云物联网平台操控设备(IOT)一 设备上云 微信小程序连接阿里云物联网平台操控设备(IOT)二 微信小程序开发(一) 微信小程序连接阿里云物联网平台操控设备(IOT)三 ...

最新文章

  1. matlab中dither 函数,(转)matlab里一些简单的函数
  2. 【前端来刷LeetCode】两数之和与两数相加
  3. 企业关系网络分析,大数据时代淘金利器
  4. 没有连接上aspnetdb.mdf数据库
  5. Kubernetes安装之十:配置node节点之kube-proxy
  6. go语言快速刷《程序员面试金典》(2)
  7. php中define的参数_php中define的用法有哪些
  8. SAP License:SAP顾问你的路在何方?
  9. cin指定输入截止符
  10. swiper动态加载数据滑动失效,ajax执行后swiper.js的效果消失问题
  11. 整数数组的最大子数组
  12. sharelatex在centos 6.7 64位上的部署(2)
  13. win10计算机用户账户和密码,win10改administrator账户密码的方法
  14. 简单的网页在线咨询代码
  15. 图书销售系统需求分析获取
  16. Java 实例 – 打印平行四边形和打印倒立的三角形
  17. IpadOS15.4系统通用控制开启
  18. 1.python性能优化
  19. PHP如何读取txt文档域名集,并且生成数组/随机显示一个
  20. 雪后看疫情:一切能否变得更加清澈而透明?

热门文章

  1. 两台小米手机如何实现远程控制
  2. 社交电商如何运营推广?
  3. Kotlin扩展方法进化之Context Receiver
  4. python 多版本共存
  5. TimingLaba(定时播放软件)控制文件夹内音乐播放间隔的方法
  6. 从零开始入门 K8s | Kubernetes API 编程利器:Operator 和 Operat
  7. 【图文教程】注册Oculus开发者账号
  8. 10个谈话技巧让你平步青云
  9. 计算机动漫与游戏制作报告,计算机动漫与游戏制作专业课程体系建设总结报告.PDF...
  10. 微信小程序有时不自动换行 强制换行;tabbar兼容苹果底部小黑条;单行省略号