esp32-c3开发板: 微信小程序连接蓝牙控制风扇

1,344 阅读2分钟

使用合宙esp32-c3开发板Luatos开发蓝牙,微信小程序连接esp32-c3,来操控风扇的开关,把一个USB风扇升级成一个能用手机控制的智能风扇

背景:之前买了一个USB的小风扇,开关坏了,就一直搁置在办公桌抽屉里面了。最近学习了esp32-c3的开发,就想着用esp32-c3的蓝牙和wifi,来控制风扇,升级成一个智能风扇,可以用手机遥控。

硬件清单: 一块合宙esp32-c3开发板, 一个5v光耦隔离继电器, 一个USB接口小风扇

a4eb7e01aa3038f3bbd875d5fc957c7.jpg

一: LuatOs 蓝牙功能开发

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "bledemo"
VERSION = "1.0.0"

log.info("main", PROJECT, VERSION)

-- 一定要添加sys.lua !!!!
sys = require("sys")

-- 添加硬狗防止程序卡死
if wdt then
    wdt.init(9000) -- 初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
end

local P1, P2, P3 = 12, 13, 4 -- 赋值开发板LED引脚编号
local LEDA = gpio.setup(P1, 0, gpio.PULLUP)
local LEDB = gpio.setup(P2, 0, gpio.PULLUP)
local GPIO4 = gpio.setup(P3, 0, gpio.PULLUP)
-- 监听GATT服务器的WRITE_CHR, 也就是收取数据的回调
sys.subscribe("BLE_GATT_WRITE_CHR", function(info, data)
    -- info 是个table, 但当前没有数据
    log.info("1ble12", "data got!!", data:format())
    if data:format() == '1' then
        -- 开灯1
        nimble.send_msg(1, 0, 'open air: 1')
        LEDA(1)
        LEDB(1)
        GPIO4(1)
    elseif data:format() == '2' then
        -- 关风扇
        nimble.send_msg(1, 0, 'close air: 2')
        LEDB(0)
        LEDA(0)
        GPIO4(0)
    else
        -- 关风扇
        nimble.send_msg(1, 0, 'close air: else')
        LEDB(0)
        LEDA(0)
        GPIO4(0)
    end
end)

sys.taskInit(function()
    sys.wait(2000)

    -- BLE模式, 默认是SERVER/Peripheral,即外设模式, 等待被连接的设
    -- nimble.mode(nimble.MODE_BLE_SERVER) -- 默认就是它, 不用调用

    -- 设置SERVER/Peripheral模式下的UUID, 支持设置3个
    -- 地址支持 2/4/16字节, 需要二进制数据, 例如 string.fromHex("AABB") 返回的是2个字节数据,0xAABB
    if nimble.setUUID then -- 2023-02-25之后编译的固件支持本API
        nimble.setUUID("srv", string.fromHex("380D")) -- 服务主UUID         ,  默认值 180D
        nimble.setUUID("write", string.fromHex("FF31")) -- 往本设备写数据的UUID,  默认值 FFF1
        nimble.setUUID("indicate", string.fromHex("FF32")) -- 订阅本设备的数据的UUID,默认值 FFF2
    end

    -- 可以自定义名称
    nimble.init("zhuangwei-007") -- 蓝牙名称可修改,也有默认值LOS-$mac地址

    sys.wait(500)
    -- 打印MAC地址
    local mac = nimble.mac()
    log.info("ble", "mac", mac and mac:toHex() or "Unknwn")

    -- -- 发送数据
    -- while 1 do
    --     sys.wait(10000)
    --     nimble.send_msg(1, 0, 'hello weiwei!')
    -- end
end)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()

二: 微信小程序

代码就不上了,按照官方文档,使用api,基本很快就上手

b920877e8bc8742d805e95e48b5b5c7.jpg

三: 总结

微信小程序连接esp32-c3蓝牙,控制GPIO4号引脚高低电平,从而控制继电器的闭合,控制电风扇的开关。 图片大小限制20M,所以我压缩了,画质有点感人,兄弟们随便看一下。。。 tutieshi_480x847_27s (1).gif