• 欢迎大家分享资料!前往留言板评论即可!

自己开发微信小程序控制Air202模块(2)Air202部分开发

合宙 模组资料网 2年前 (2021-05-15) 340次浏览 0个评论 扫描二维码

1、准备材料
一个LED灯、一个S5开发板、一个USB-TTL模块
自己开发微信小程序控制Air202模块(2)Air202部分开发
自己开发微信小程序控制Air202模块(2)Air202部分开发
2、将USB-TTL和S6开发板连接。
接线方式如下图
自己开发微信小程序控制Air202模块(2)Air202部分开发
3、连接LED和开发板。我用的是IO6这个IO口,所以将LED一端接地一端接在IO6。使用普通的LED灯是建议串联一个1K的电阻,防止LED被烧坏。
4、编写Air202的程序。
main.lua

PROJECT = "ALIYUN"
VERSION = "2.0.0"

--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
require "sys"
require "net"
--每1分钟查询一次GSM信号强度
--每1分钟查询一次基站信息
net.startQueryAll(60000, 60000)
--加载网络指示灯功能模块
--根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚
require "netLed"
netLed.setup(true,pio.P1_1)
--网络指示灯功能模块中,默认配置了各种工作状态下指示灯的闪烁规律,参考netLed.lua中ledBlinkTime配置的默认值
--如果默认值满足不了需求,此处调用netLed.updateBlinkTime去配置闪烁时长

--加载错误日志管理功能模块【强烈建议打开此功能】
--如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api
require "errDump"
errDump.request("udp://ota.airm2m.com:9072")
--加载阿里云功能测试模块
require "testALiYun"

--启动系统框架
sys.init(0, 0)
sys.run()

testALiYun.lua

module(...,package.seeall)
require"aLiYun"
require"misc"
require"pm"
require"pins"

local PRODUCT_KEY = "a1sLSgWRLGZ"

local function getDeviceName()
    return "869300031602869"
end

local function setDeviceSecret(s)
    misc.setSn(s)
end

local function getDeviceSecret()
    return "2wdomNTGLFZCPykcxCUWrEH3c1O8qGs9"
end

--阿里云客户端是否处于连接状态
local sConnected


---数据接收的处理函数
-- @string topic,UTF8编码的消息主题
-- @number qos,消息质量等级
-- @string payload,原始编码的消息负载
local function rcvCbFnc(topic,qos,payload)

    log.info("testALiYun.rcvCbFnc:",topic,qos,payload)

    local tjsondata,result,errinfo = json.decode(payload)---tjsondata数据,result 解析结果 true or false ,errinfo错误信息
    key = tjsondata["params"]['LightSwitch']
    log.info("key:",key)
    data(key)


end

function data(key)--函数在全局中被引用时   不要加local
    local led1 = pins.setup(pio.P0_6,0)
    if key == 0 then
        led1(0)
        log.info("ledon")
    else if key == 1 then
        led1(1)
        log.info("ledoff")
        end
    end

end
--- 连接结果的处理函数
-- @bool result,连接结果,true表示连接成功,false或者nil表示连接失败
local function connectCbFnc(result)
    log.info("testALiYun.connectCbFnc",result)
    sConnected = result
    if result then
        --订阅主题,不需要考虑订阅结果,如果订阅失败,aLiYun库中会自动重连
        aLiYun.subscribe({["/sys/"..PRODUCT_KEY.."/"..getDeviceName().."/thing/service/property/set"]=0, ["/"..PRODUCT_KEY.."/"..getDeviceName().."/get"]=1})
        --注册数据接收的处理函数
        aLiYun.on("receive",rcvCbFnc)
        --PUBLISH消息测试
        publishTest()
    end
end

-- 认证结果的处理函数
-- @bool result,认证结果,true表示认证成功,false或者nil表示认证失败
local function authCbFnc(result)
    log.info("testALiYun.authCbFnc",result)
end


function gpio4IntFnc(msg)
    local beel = pins.setup(pio.P0_2,0)
    log.info("testGpioSingle.gpio4IntFnc",msg,getGpio4Fnc())
    --上升沿中断
    if msg==cpu.INT_GPIO_POSEDGE then
    --下降沿中断
        beel(1)
        log.info("ladi,miedeng")
    else
        beel(0)
        publishTest(LockCloseData)
        log.info("liang")
    end
end

--GPIO4配置为中断,可通过getGpio4Fnc()获取输入电平,产生中断时,自动执行gpio4IntFnc函数
getGpio4Fnc = pins.setup(pio.P0_4,gpio4IntFnc)


--采用一机一密认证方案时:
--配置:ProductKey、获取DeviceName的函数、获取DeviceSecret的函数;其中aLiYun.setup中的第二个参数必须传入nil
aLiYun.setup(PRODUCT_KEY,nil,getDeviceName,getDeviceSecret)

--采用一型一密认证方案时:
--配置:ProductKey、ProductSecret、获取DeviceName的函数、获取DeviceSecret的函数、设置DeviceSecret的函数
--aLiYun.setup(PRODUCT_KEY,PRODUCE_SECRET,getDeviceName,getDeviceSecret,setDeviceSecret)

--setMqtt接口不是必须的,aLiYun.lua中有这个接口设置的参数默认值,如果默认值满足不了需求,参考下面注释掉的代码,去设置参数
--aLiYun.setMqtt(0)
aLiYun.on("auth",authCbFnc)
aLiYun.on("connect",connectCbFnc)

以上是两个Air的程序,只需要将里面ProductKey、DeviceName、DeviceSecret修改为自己的即可。
自己开发微信小程序控制Air202模块(2)Air202部分开发
5、考虑到有刚接触luat的小伙伴,下面我们简单分析一下代码。
自己开发微信小程序控制Air202模块(2)Air202部分开发
在这一段是我们连接阿里云MQTT后判断返回结果为真的情况下执行的。
连接成功后我们需要订阅阿里云MQTT下发的主题,也就是我们上一篇说到的Topic类。
自己开发微信小程序控制Air202模块(2)Air202部分开发
然后我们启动数据接收处理函数
自己开发微信小程序控制Air202模块(2)Air202部分开发
调用IO口控制函数,并根据参数key的值 0或1 来控制IO6口的高低电平。
自己开发微信小程序控制Air202模块(2)Air202部分开发


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址