1. 板子air202控制继电器原理图:

2. air202模块设置连接mqtt服务器通信

操作步骤:

(1)  air202模块创建mqtt客户端

(2) 获取设备IMEI检测分配的ip(设备是否连接上网络)

(3) 订阅主题 / 发布主题

(4) 处理断线重连问题

(5) 处理接收的数据

require"misc"
require"mqtt"
require"pins"
require"common"
module(...,package.seeall)
------------继电器引脚---------------------------
RelayPin1 = pio.P0_4  --定义继电器引脚
RelayPin2 = pio.P0_5
RelayPin3 = pio.P0_6
RelayPin4 = pio.P0_7pio.pin.setdir(pio.OUTPUT,RelayPin1)   --配置gpio方向 输出方式
pio.pin.setdir(pio.OUTPUT,RelayPin2)    --配置gpio方向 输出方式
pio.pin.setdir(pio.OUTPUT,RelayPin3)    --配置gpio方向 输出方式
pio.pin.setdir(pio.OUTPUT,RelayPin4)    --配置gpio方向 输出方式pio.pin.setval(0,RelayPin1)              --输出gpio电平
pio.pin.setval(0,RelayPin2)             --输出gpio电平
pio.pin.setval(0,RelayPin3)             --输出gpio电平
pio.pin.setval(0,RelayPin4)             --输出gpio电平------------定义变量区--------------------------  lbsmqtt.airm2m.com   1884
local PROT,ADDR,PORT = "TCP","47.93.19.134",1883  --连接mqtt服务器信息
local MqttUserName = "yang"
local MqttUserPassword = "11223344"
local MqttSubToptic = "222"  --订阅主题
local MqttPubToptic = "111"  --发布主题
local UartRecedata = ""
local UartReceDataCnt = 0      ---------串口1接收函数注册----------------------
uart.setup(1,115200,8,uart.PAR_NONE,uart.STOP_1)--设置串口1的 波特率 数据位 校验位 停止位
local function UartRead()data = uart.read(1,"*l")            --[*l:读取到结束字符\n或者阻塞发送 ] UartRecedata = UartRecedata..data   UartReceDataCnt =UartReceDataCnt + 1
end
sys.reguart(1,UartRead)--注册串口1的数据接收函数,串口收到数据后,会以中断方式,调用read接口读取数据---------开始mqtt连接--------------------------
--通过20ms循环定时器检测是否存在要发布的信息,数据来源为模块串口
sys.timer_loop_start(function() if UartRecedata ~= "" then mqttclient:publish(MqttPubToptic,UartRecedata)--发布主题,发布一条消息 UartReceDataCnt = 0UartRecedata = ""end
end,20)  --[[功能:收到发布消息时的回调函数]]
local function ReceMessage(topic,data,qos)if data ~= "" thenuart.write(1,data)--把mqtt客户端接收到的数据通过串口1发送出去if data=="Relay1=1"      then pio.pin.setval(1,RelayPin1) elseif data=="Relay1=0"       then pio.pin.setval(0,RelayPin1) elseif data=="Relay2=1"       then pio.pin.setval(1,RelayPin2)    elseif data=="Relay2=0"        then pio.pin.setval(0,RelayPin2)    elseif data=="Relay3=1"        then pio.pin.setval(1,RelayPin3)    elseif data=="Relay3=0"        then pio.pin.setval(0,RelayPin4)    elseif data=="Relay4=1"        then pio.pin.setval(1,RelayPin4)    elseif data=="Relay4=0"        then pio.pin.setval(0,RelayPin4) end    data =""end
end--[[功能:MQTT连接断开后的回调]]
local function discb()print("DisconnectMqtt!!!!!")sys.timer_start(mqttclient:connect(misc.getimei(),240,MqttUserName,MqttUserPassword,MqttConnectSucceed,MqttConnectError),20000)
end--[[功能:MQTT 订阅主题之后收到SUBACK的回调函数   ]]
local function subSuccess()print("SubSuccess!!!!!")
end--[[功能:MQTT 连接成功回调函数]]
local function MqttConnectSucceed() -- mqtt连接成功后, 同时订阅主题print("MqttConnectSucceed!!!!!")mqttclient:subscribe({{topic=MqttSubToptic,qos=0}}, subSuccess)--订阅主题mqttclient:regevtcb({MESSAGE=ReceMessage})    --注册事件的回调函数,MESSAGE事件表示收到了订阅的消息
end--功能:MQTT 连接失败回调函数
local function MqttConnectError()   print("MqttConnectError!!!!!")
end--[[功能:SOCKET异常回调函数, 此处是恢复异常的一种方式<进入飞行模式,半分钟后退出飞信模式>]]
local function SocketError()        print("SocketError!!!!!")         misc.setflymode(true)--调用库misc.lua中的函数;控制飞行模式:true为进入飞行模式,false为退出飞行模式sys.timer_start(misc.setflymode,30000,false)--启动定时器30秒后调用回调函数
end--[[功能:IMEI读取成功,成功后,才去创建mqtt client,连接服务器,因为用到了IMEI号]]
local function imeirdy()mqttclient = mqtt.create(PROT,ADDR,PORT)mqttclient:connect(misc.getimei(),240,MqttUserName,MqttUserPassword,MqttConnectSucceed,MqttConnectError)--连接mqtt服务器,socket出现异常时,自动重启软件
end--[[模块内部lib库中定义,只能使用表的形式调用]]
local procer =
{IMEI_READY = imeirdy,
}
--注册消息的处理函数
sys.regapp(procer)

通过PC端MQTT客户端发送"open"开继电器;

PC端mqtt客户端发送"close"关继电器

手机端APP测试

源码:https://download.csdn.net/download/dianzishi123/10784107

Air202学习 四 (模块mqtt通信控制继电器)相关推荐

  1. python多线程编程模块不包括_python 学习_第四模块 并发编程(多线程)

    python 学习_第四模块 并发编程(多线程) 一  开启线程方式 from threading importThreadimporttimedefsay(name): time.sleep(2)p ...

  2. 基于STM32的ESP8266模块控制多路继电器

    基于STM32的ESP8266模块控制多路继电器 1.视频讲解 基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制 物联网视频教程STM32+ESP8266 2.实物设计 ESP82 ...

  3. python学习四(处理数据)

    python学习四(处理数据) head first python中的一个数据处理的例子 有四个U10选手的600米成绩,请取出每个选手跑的最快的3个时间.以下是四位选手的9次成绩 James 2-3 ...

  4. 学习之模块架构 DotNetNuke 6

    前面的博客介绍了: 如何在本地安装DNN6 如何创建DNN模块 博客园原文地址 :  学习之模块架构 DotNetNuke 6 这篇博客主要是讲模块的架构和加载,以及模块与DotNetNuke门户网站 ...

  5. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  6. 第四模块MySQL数据库

    第四模块MySQL数据库 从今天开始,我们将进入系列课程的 第四模块 的学习,这个模块就是给大家讲解MySQL数据库. 以前,在开发程序时,我们会把很多的数据和信息存储到某个文件夹中的文件中,例如:u ...

  7. RETAS HD更新2009年最终版四模块集成安装包

    RETAS HD更新2009年最终版四模块集成安装包 RETAS!PRO HD 系列是在1993年发布的一套完整的数码动画制作工具,它取代了原先手工制作的塞璐璐与胶片,仅在一台个人电脑上就实现了动画制 ...

  8. 【PLC学习四】散装上料例子学习(1)

    [PLC学习四]散装上料例子学习(1) 目录 **[PLC学习四]散装上料例子学习(1)** **一.散装上料** **二.项目设计需求** **三.PLC程序** 一.散装上料 散装上料的最终目的: ...

  9. C#多线程学习(四) 多线程的自动管理(线程池) (转载系列)——继续搜索引擎研究...

    在多线程的程序中,经常会出现两种情况: 一种情况:   应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应                   这一般使用ThreadPo ...

  10. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 转载于:https://www.cnblo ...

最新文章

  1. 充血模型的ORM能做什么?——ORM组件XCode(十八般武艺)
  2. Java--图片浏览器
  3. mysql 自动补齐 表名,列名 方法, 重启mysql方法
  4. java 继承和内部类_Java自学-接口与继承 内部类
  5. Linux学习笔记-Linux下的设备文件
  6. finereport报表设计中模板数据集的sql语句中if的用法_报表工具中动态参数的灵活运用...
  7. 小学教师计算机应用水平和能力,中小学教师信息技术应用能力的现状与对策
  8. IntelliJ IDEA 开启很慢,运行不流畅,大项目卡顿?一招配置解决!
  9. lodop指定打印机打印_2020年打印机推荐选购,看这篇就够了
  10. HBase常用命令(超全超详细)
  11. 教你如何弹好吉他-合理的安排你的练习时间
  12. 区块链、人工智能和物联网之间是什么关系?
  13. 弹性网卡支持私网多IP
  14. 微擎弹出确认授权获取用户头像
  15. Windows环境下的视图之间切换快捷键及几个常用快捷键
  16. 【Java】所有做过的面试题
  17. Linux平台被勒索软件REvil盯上
  18. 吴文俊:数学机械化——回顾与展望
  19. GNSS入门1-误差
  20. 2020,那些惊艳我的产品迭代

热门文章

  1. kron matlab_使用kron来实现repmat, repelem的功能
  2. html radio 更换图片,CSS 点击radio实现两个图片样式切换并且多个radio中只能有一个checked...
  3. Windows电脑上不错的五款办公软件
  4. idea 导出项目到eclipse
  5. 设置360浏览器默认以极速模式打开
  6. vue 动态渲染表格序号列
  7. mac操作系统如何访问共享计算机,windows电脑怎么访问苹果电脑共享文件夹
  8. linux用独显运行steam,如何使用Steam Play在Linux上玩几乎所有Windows游戏 | MOS86
  9. 「新手指南」如何在Mac上格式化U盘和移动硬盘?
  10. [生存志] 第11节 历代大事件概览 春秋