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

索引

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

微信小程序连接物联网(一):初始化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) then
      print("HTTP request failed")
    else
      print(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) then
      print("HTTP request failed")
    else
      print(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)
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP8266是一款低成本、低功耗的Wi-Fi模块,可以用于连接互联网。而阿里云微信小程序是一种基于微信平台的应用程序,可以通过微信进行访问和使用。如果你想让ESP8266连接阿里云微信小程序,可以按照以下步骤进行操作: 1. 配置ESP8266:首先,你需要将ESP8266连接到你的开发板或者单片机上,并通过串口或者SPI接口与其进行通信。然后,你需要在ESP8266上安装相应的固件,例如NodeMCU或者Arduino固件。 2. 连接到Wi-Fi网络:在ESP8266上配置并连接到你的Wi-Fi网络,这样它才能够访问互联网。你可以使用ESP8266的AT指令或者编程语言(如Lua或Arduino)来实现这一步骤。 3. 注册阿里云账号:在阿里云官网上注册一个账号,并创建一个IoT平台实例。在实例中,你可以创建设备和产品,并获取相应的设备密钥和证书。 4. 编写代码:使用ESP8266的编程语言(如Lua或Arduino)编写代码,实现与阿里云IoT平台的通信。你需要使用阿里云提供的SDK或者API来实现设备与平台之间的数据传输和交互。 5. 配置微信小程序:在微信小程序开发者平台上创建一个小程序,并获取相应的AppID和AppSecret。然后,你需要在阿里云IoT平台中配置微信小程序的相关信息,包括AppID、AppSecret和回调URL等。 6. 实现数据传输:通过编程语言中的HTTP或MQTT协议,将ESP8266与阿里云IoT平台和微信小程序进行数据传输。你可以使用阿里云提供的SDK或者API来实现这一步骤。 以上是ESP8266连接阿里云微信小程序的基本步骤。具体的实现方式和代码可以根据你的需求和开发环境进行调整和修改。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值