1、准备材料
一个LED灯、一个S5开发板、一个USB-TTL模块
2、将USB-TTL和S6开发板连接。
接线方式如下图
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修改为自己的即可。
5、考虑到有刚接触luat的小伙伴,下面我们简单分析一下代码。
在这一段是我们连接阿里云MQTT后判断返回结果为真的情况下执行的。
连接成功后我们需要订阅阿里云MQTT下发的主题,也就是我们上一篇说到的Topic类。
然后我们启动数据接收处理函数
调用IO口控制函数,并根据参数key的值 0或1 来控制IO6口的高低电平。