小度音箱+esp8266做语音控制开关

本文介绍了如何利用小度音箱、ESP8266(ESP-01S)和继电器模块打造一个语音控制开关。通过设置HTTPS服务器、烧录Lua固件以及在小度技能平台上配置接口,实现了通过小度音箱的语音指令控制开关的开合。详细步骤包括硬件改造、固件烧录、lua程序编写以及小度技能平台的配置。
摘要由CSDN通过智能技术生成

大概用到:插板、esp-01s继电器模块、usb转串口ttl模块、https服务器、小度音箱。

大概原理:

https服务器上提供开关状态查询接口,esp-01s烧录编写的固件,使得可以连接wifi后轮询这个接口,并根据接口返回的状态打开或关闭继电器。在小度技能平台创建开关技能,在https服务器上提供oauth2.0接口和遵循dueros智能家具协议的开关控制接口。这样,通过小度的真机测试模式,让小度“打开开关”,小度会调到https服务器打开开关接口,修改开关状态,间接控制开关开合。

大概过程:

(1)插板改造,把esp-01s继电器模块的常开端串到插板的一根线上。

(2)esp-01s可以使用nodemcu固件,直接lua开发,简化过程。

关于nodemcu固件,可以去https://nodemcu-build.com/在线编译,通过填邮箱、选择需要的模块、点击开始构建后,过会会收到包含固件下载地址的邮件。这里之前编译过,当时选了模块有(adc,enduser_setup,file,gpio,http,mqtt,net,node,tmr,uart,wifi,tls),选了的模块,在lua脚本中,可以使用相关api,api文档地址https://nodemcu.readthedocs.io/en/master/

关于固件烧录,esp-01s供电为3.3v,usb转ttl供电为5v,这里烧录时做了个转接板来连接,用asm1117 3.3v稳压器得到的3.3v(usb转ttl带了3.3v供电,但没用,部分资料显示可能会烧坏,没试),RST与GND上接了微动开关做重启,GPIO0与GND接了拨动开关用来切换下载模式。连接好后,打开NodeMCU-PyFlasher-4.0-x64.exe,选择串口和固件,115200,Quad I/O,点击刷写,等待完成。不正常的话多试几次,连线建议用短线。

(3)写入lua程序。

换用ESPlorer,选择串口,115200,打开串口,按前面转接板上的微动开关重启,刷的固件会初始化文件系统。软件右边显示命令行,左面写命令或脚本。左边写print("hello")并选择发送,会发送到命令行,执行后命令行显示结果hello。

这时候可以编写需要的init.lua脚本,通过upload上传,写入esp-01s,再按微动开关重启,nodemcu自动加载init.lua脚本执行,连接wifi,请求接口。

到这里,可以通过修改接口返回值,测试能看控制开关。

-- //init.lua
print('hello')

-- wifi连接
wifi.setmode(wifi.STATION)
station_cfg={}
station_cfg.ssid="changeme"
station_cfg.pwd="changeme"
station_cfg.auto=true
station_cfg.save=true
wifi.sta.config(station_cfg)
print(wifi.sta.getip())
-- //wifi.sta.disconnect()

-- ap模式,手机连接此wifi,到192.168.4.1配置wifi
enduser_setup.start(
    function()
        print("enduser conn wifi as:" .. wifi.sta.getip())
    end,
    function(err, str)
        print("enduser conn wifi err #" .. err .. ": " .. str)
    end
)

-- //print(uart.setup(0, 9600, 8, 0, 1, 1 ))

-- gpio0控制继电器,对应nodemc的pin 3,gpio2控制板载led,对应4
pin1 = 3
pin2 = 4
gpio.mode(pin1,gpio.OUTPUT)
gpio.mode(pin2,gpio.OUTPUT)
gpio.write(pin1,gpio.HIGH)
gpio.write(pin2,gpio.HIGH)

myurl = "https://test.xxxxxxx.com/test/led.php"

mytimer = tmr.create()
mytimer:alarm(5000, tmr.ALARM_AUTO, function()
    ip = wifi.sta.getip()
    if (ip == nil) then
        print('wifi not connect...')
        return
    else
        print(wifi.sta.getip())
    end

    print('http req led.php....')
    http.get(myurl, nil, function(code, data)
        if (code < 0) then
            print("HTTP request failed...")
        else
            print("HTTP request succ...", code, data)
            if (data == "00") then
                gpio.write(pin1,gpio.LOW)
                gpio.write(pin2,gpio.LOW)
            elseif (data =="01") then
                gpio.wri
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值