回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

行空板M10扩展板+基于行空板M10、K10的工作室物联网红外控制系统 中等

头像 张一 2025.06.30 30 0

这是一个基于行空版M10的工作室物联网红外控制系统。

设计初衷是因为在日常我在工作室中待的时间比较长,每天都需要开灯关灯,开空调关空调,以开关照明桌面照明,比较麻烦,休息下还要需要起身关灯,遥控空调什么的。

另外是想把这个系统做成不同的新课标初中八年级物联网知识点,顺便能给学生做一个演示。

所以将所有的东西都基于图形化来进行设计。

近两年虽说白嫖了DF不少好东西,比如M10扩展板啊,k10,这次的电池板确实解决了我设计的系统一大痛点——没有移动端。虽说有语音识别,但是语音控制在桌面,躺在沙发上就要靠吼。

系统为了降成本,使用了esp8266和自己画的扩展板作为门锁和桌面端的设备,但是这不是DF的8266,是那种13块一块的稀罕货,还好自己爱折腾,做了个df8266和esp8266针脚的对应图,普通数字输出加个传感器啥的也还好用,但这次我想把空调遥控也集成进来,虽说有现成的HA以及类似米家、苹果、点灯一系列更好用的系统,但是我的初衷是做一套图形化的学生能参与设计改造的开放系统,于是再次重操就业玩起了MIND+的用户自定义模块,但是这次有点难度的是过去加传感器,就是一句头文件一句设置或者调用函数。这次需要对8266添加用户自定义模块实现空调系统使用的38Khz的红外发射和接收功能。需要使用到一IR remove这个库。除了库文件以外,还要使用它自定好的一些函数,Mind+添加自定义用户模块,main.ts里,添加全局变量,需要在include中添加。微信图片_20250630210552.jpg

 

 

运行SIOT服务器,也有彩蛋,服务器掉线问题悬而未决。

 

系统分为

1. SIoT服务器中枢

 

核心设备: M10主机

功能:WIFI热点和SIOT服务器

 

通信协议: MQTT/HTTP

2. 移动控制终端

设备: M10 + 电池扩展板

 功能: 移动遥控器 状态监控 紧急控制

 3. 红外控制系统

 ESP8266主控 红外发射电路板

控制对象:

空调

安装位置: 桌面

4. 智能门禁系统

门锁部分: ESP8266电子锁体

识别部分: K10人脸识别模组

联动功能: 门禁自动亮灯

5. 照明系统

 桌面照明:

 ESP8266 调光模块

室内照明:

 ESP8266 86底盒安装

 6. 网络拓扑    

 通信架构:  星型网络    

 MQTT协议  

 

8266门锁.png
8266桌面语音红外遥控端.png
K10门禁1.png
K10门禁2.png
M10siot服务器端.png
M10siot移动端.png
main.png
siot.png
调试.png
外壳.png
微信图片_20250630193910.jpg
微信图片_20250630193911.jpg
微信图片_202506301939111.jpg

 

 

 

所有设备都连接到这个M10热点,并且连接它这SIOT服务器,在服务器中建了有四个主题,分别是门禁的,灯的,空调的。移动端可以使用按键的方式进行开门、关门、开灯、关灯这些操作。桌面可以使用语音方式进行开灯、关灯以及一些简单的命令还在不断的完善中。

微信图片_20250630192341.jpg
微信图片_20250630192359.jpg
微信图片_20250630192400.jpg
微信图片_20250630192401.jpg
微信图片_20250630193912.jpg
微信图片_20250630202158.jpg
微信图片_202506301924001.jpg

门锁的板子上出现一个问题,就是在演示的过程中使用小舵机是没有问题的,但是一旦换了打舵机,可能是电流的问题导致系统会重启。所以。又重新改了电路,将这个基于这个IP5306的这个电池管理芯片直接输出到舵机,做了一个充电充电和电池自放电的这样一个电源切换。

1.0.png
1.2.png

程序部分过于简单,直接看图吧。

M10 和电池板还有扩展板组装后自己画了个外壳,只保留了几个重要按键开关接口,更多的扩展口嫌麻烦没开口。

最后吐槽造物记这个地方编辑文章不方便,要改。

 

代码
enum XINGHAO {
    //% block="GREE"
    HIGH,
    //% block="MEIDI"
    LOW
}
enum COMMAND {
    //% block="ON"
    HIGH,
    //% block="OFF"
    LOW
}



//% color="#33CCFF" iconWidth=80 iconHeight=30
namespace Irsend {
    //% block="初始化D4引脚的红外发射" blockType="command"
   export function CHUSHIHUA(parameter: any, block: any) {
        Generator.addInclude('IncludeArduino', '#include <Arduino.h>');
        Generator.addInclude('IncludeIRremoteESP8266', '#include <IRremoteESP8266>');
        Generator.addInclude('IncludeIRsend', '#include <IRsend.h>');
        Generator.addInclude(`KIrLed`, `const uint16_t kIrLed = D4;// ESP8266 GPIO pin to use. Recommended: 15 (D8)(df8266-D4).`);
        Generator.addInclude(`ButtonState`, `int buttonState = 0;`);
        Generator.addSetup(`pinMode`, `	pinMode(D4, OUTPUT);`);
        Generator.addInclude(`IRsend`, `IRsend irsend(kIrLed);`);
        Generator.addInclude(`greeOn`, `const uint16_t greeOn[279] = {9054, 4422,  716, 1592,  714, 492,  688, 518,  714, 1592,  716, 1590,  716, 1592,  716, 1592,  716, 490,  714, 492,  688, 516,  716, 490,  714, 490,  690, 518,  714, 492,  714, 490,  714, 492,  714, 490,  714, 492,  714, 490,  714, 492,  714, 1592,  714, 490,  714, 490,  716, 488,  716, 490,  714, 490,  714, 492,  714, 492,  714, 1592,  714, 492,  714, 1592,  714, 492,  714, 490,  714, 1594,  714, 492,  712, 19924,  716, 1592,  714, 490,  716, 490,  714, 490,  714, 1592,  714, 490,  714, 492,  714, 492,  714, 490,  714, 492,  714, 492,  714, 490,  714, 492,  714, 492,  712, 492,  716, 490,  716, 492,  712, 492,  714, 492,  714, 492,  714, 490,  716, 490,  714, 492,  712, 490,  716, 490,  714, 492,  714, 490,  716, 492,  714, 490,  714, 490,  716, 1592,  714, 492,  714, 39934,  9052, 4422,  716, 1590,  714, 490,  714, 492,  714, 1590,  716, 1594,  714, 1590,  716, 1592,  716, 490,  714, 492,  714, 490,  714, 492,  688, 518,  714, 492,  716, 488,  714, 492,  714, 492,  714, 492,  714, 490,  714, 490,  714, 490,  714, 1592,  714, 492,  716, 488,  714, 492,  714, 490,  714, 490,  688, 520,  714, 490,  714, 1594,  686, 1618,  688, 1620,  714, 490,  716, 492,  710, 1596,  714, 492,  688, 19952,  712, 490,  714, 490,  714, 492,  712, 492,  714, 490,  716, 490,  714, 492,  716, 490,  714, 492,  712, 492,  712, 494,  714, 492,  686, 516,  712, 496,  664, 540,  686, 518,  688, 518,  688, 518,  662, 542,  664, 542,  664, 1644,  664, 1644,  664, 542,  664, 542,  662, 542,  664, 540,  664, 542,  664, 540,  664, 542,  664, 1644,  710, 1596,  664, 540,  664};`);
        Generator.addInclude(`greeOff`, `const uint16_t greeOff[139] =  {8948, 4502,  650, 552,  648, 552,  650, 1644,  650, 552,  648, 1648,  648, 1648,  650, 1646,  650, 552,  648, 552,  648, 1646,  650, 552,  648, 1646,  648, 552,  646, 552,  648, 552,  648, 552,  648, 552,  648, 552,  648, 552,  648, 552,  648, 552,  648, 1646,  650, 552,  648, 554,  646, 554,  646, 552,  650, 552,  646, 552,  648, 1648,  648, 550,  650, 1648,  648, 552,  648, 552,  648, 1648,  648, 552,  648, 20010,  652, 1646,  648, 554,  646, 552,  648, 552,  646, 1650,  648, 552,  650, 552,  648, 554,  648, 554,  646, 552,  648, 552,  648, 552,  646, 554,  646, 1650,  650, 550,  648, 554,  650, 552,  648, 552,  648, 552,  648, 552,  648, 552,  648, 552,  648, 552,  648, 554,  648, 554,  646, 552,  648, 552,  648, 1648,  648, 1648,  648, 1648,  648, 554,  648, 1650,  648};`);
        Generator.addInclude(`greehotOn`, `const uint16_t greehotOn[279] = {9056, 4420,  716, 490,  716, 490,  716, 1592,  716, 1592,  716, 1592,  714, 1592,  716, 1592,  716, 488,  716, 1592,  716, 490,  714, 490,  716, 1592,  716, 490,  716, 490,  716, 488,  716, 490,  716, 488,  716, 490,  716, 490,  716, 488,  718, 490,  714, 490,  714, 490,  716, 490,  716, 488,  716, 492,  716, 488,  716, 490,  716, 1592,  716, 488,  716, 1592,  714, 490,  716, 490,  716, 1590,  714, 492,  716, 19922,  716, 1592,  716, 488,  716, 490,  714, 490,  716, 1590,  714, 490,  716, 490,  714, 490,  716, 488,  716, 490,  716, 490,  714, 490,  714, 490,  716, 492,  716, 488,  716, 490,  716, 490,  714, 490,  714, 492,  716, 488,  716, 490,  716, 490,  716, 490,  714, 490,  716, 490,  716, 490,  716, 490,  716, 490,  716, 490,  716, 490,  716, 490,  714, 490,  716, 39932,  9058, 4422,  716, 490,  716, 490,  714, 1592,  714, 1592,  716, 1592,  714, 1592,  714, 1592,  716, 490,  714, 1590,  716, 490,  716, 488,  716, 1592,  714, 490,  716, 490,  716, 490,  716, 490,  716, 488,  716, 490,  716, 490,  716, 492,  716, 490,  714, 490,  716, 490,  716, 490,  714, 492,  716, 488,  716, 490,  716, 488,  716, 1592,  716, 1590,  714, 1590,  716, 490,  716, 490,  714, 1592,  716, 490,  714, 19924,  716, 490,  716, 490,  714, 488,  716, 490,  716, 490,  714, 490,  716, 490,  716, 488,  716, 490,  716, 490,  716, 490,  714, 490,  716, 490,  716, 490,  714, 490,  716, 492,  714, 490,  714, 492,  714, 490,  716, 490,  714, 1592,  714, 1592,  714, 492,  714, 490,  714, 492,  714, 490,  714, 490,  714, 492,  716, 490,  714, 1594,  714, 490,  714, 492,  714};`);
        Generator.addInclude(`greehotOff`, `const uint16_t greehotOff[279] = {9028, 4446,  688, 518,  716, 490,  714, 1592,  718, 490,  688, 1618,  716, 1590,  716, 1592,  688, 518,  688, 1618,  716, 490,  718, 488,  716, 1592,  716, 490,  716, 490,  716, 490,  688, 518,  714, 490,  716, 490,  714, 490,  716, 490,  688, 518,  688, 516,  716, 490,  688, 516,  716, 490,  716, 490,  716, 490,  714, 490,  716, 1592,  716, 490,  716, 1592,  714, 490,  716, 490,  716, 1590,  716, 490,  716, 19922,  714, 1590,  716, 492,  714, 488,  716, 490,  716, 1592,  716, 490,  716, 488,  716, 490,  716, 490,  716, 490,  714, 490,  716, 490,  716, 490,  716, 490,  716, 490,  714, 490,  716, 490,  716, 490,  716, 490,  714, 490,  716, 492,  714, 488,  716, 490,  716, 490,  716, 490,  716, 490,  716, 490,  714, 490,  716, 490,  716, 490,  716, 488,  716, 1592,  716, 39932,  9052, 4422,  718, 488,  716, 490,  716, 1592,  714, 490,  716, 1592,  714, 1592,  716, 1592,  716, 490,  716, 1590,  718, 490,  716, 488,  716, 1590,  716, 490,  716, 488,  716, 490,  716, 490,  716, 490,  716, 490,  716, 490,  716, 490,  716, 488,  716, 490,  716, 490,  716, 490,  716, 490,  714, 490,  716, 490,  716, 488,  716, 1592,  714, 1592,  718, 1590,  716, 490,  716, 490,  716, 1592,  716, 488,  714, 19924,  714, 488,  716, 490,  716, 490,  716, 490,  716, 490,  716, 490,  716, 488,  718, 488,  714, 490,  714, 490,  716, 490,  716, 490,  714, 490,  714, 490,  716, 490,  714, 490,  716, 490,  716, 490,  714, 490,  716, 490,  716, 1592,  716, 1592,  714, 490,  716, 490,  716, 490,  716, 492,  714, 490,  714, 488,  716, 490,  714, 1592,  714, 492,  714, 1592,  714};`);
        Generator.addInclude(`mideahotOn`, `const uint16_t mideahotOn[299] = {4460, 4362,  560, 1600,  560, 520,  560, 1598,  560, 1600,  560, 520,  560, 518,  560, 1600,  558, 520,  560, 520,  560, 1600,  560, 518,  560, 520,  558, 1600,  560, 1600,  560, 518,  560, 1598,  560, 1600,  560, 520,  560, 1600,  558, 1600,  560, 1598,  560, 1600,  560, 1598,  560, 1600,  560, 520,  560, 1598,  560, 518,  560, 520,  560, 520,  560, 520,  558, 520,  560, 518,  560, 520,  560, 1600,  560, 1600,  560, 1598,  562, 1600,  558, 1600,  558, 520,  560, 520,  560, 1600,  560, 520,  560, 520,  560, 520,  506, 574,  506, 574,  506, 1654,  506, 1654,  528, 5240,  4380, 4418,  528, 1630,  530, 550,  528, 1630,  528, 1632,  528, 550,  528, 550,  530, 1630,  578, 502,  578, 504,  574, 1608,  552, 502,  576, 502,  578, 1606,  554, 1582,  578, 500,  580, 1604,  556, 1604,  558, 498,  582, 1580,  580, 1600,  560, 1598,  560, 1598,  562, 1600,  560, 1598,  562, 518,  560, 1598,  562, 520,  560, 520,  560, 518,  560, 518,  562, 518,  560, 520,  560, 520,  560, 1598,  560, 1600,  560, 1600,  560, 1598,  562, 1598,  560, 520,  560, 518,  562, 1600,  560, 518,  560, 518,  560, 520,  560, 520,  560, 518,  560, 1600,  560, 1600,  560, 5210,  4432, 4364,  560, 1602,  558, 1600,  558, 520,  532, 1628,  508, 572,  554, 1604,  554, 524,  556, 1604,  508, 572,  530, 1628,  508, 1652,  508, 572,  554, 524,  508, 1652,  508, 1652,  554, 524,  508, 570,  508, 572,  508, 572,  508, 570,  508, 570,  508, 572,  508, 572,  530, 548,  532, 548,  532, 548,  530, 548,  530, 550,  530, 550,  530, 550,  530, 550,  528, 550,  530, 550,  528, 550,  528, 552,  528, 550,  530, 552,  526, 550,  530, 552,  528, 550,  528, 552,  526, 576,  504, 1632,  528, 1654,  506, 1654,  506, 574,  506, 1632,  528, 1634,  526};`);
        Generator.addInclude(`mideahotOff`, `const uint16_t mideahotOff[199] = {4460, 4366,  560, 1600,  560, 520,  560, 1598,  562, 1598,  560, 518,  560, 520,  560, 1600,  560, 518,  560, 520,  560, 1600,  560, 520,  560, 518,  560, 1600,  558, 1598,  562, 518,  562, 1598,  560, 520,  560, 1598,  560, 1598,  562, 1598,  560, 1600,  560, 518,  560, 1600,  560, 1598,  560, 1600,  560, 520,  560, 518,  560, 518,  560, 520,  560, 1600,  560, 518,  560, 520,  560, 1600,  560, 1598,  560, 1600,  560, 520,  560, 518,  560, 520,  560, 520,  560, 518,  560, 518,  560, 520,  560, 518,  560, 1600,  506, 1652,  506, 1654,  506, 1654,  528, 1630,  530, 5240,  4404, 4396,  528, 1630,  528, 552,  528, 1632,  528, 1630,  528, 552,  576, 504,  528, 1630,  576, 504,  576, 504,  576, 1584,  578, 502,  576, 504,  576, 1582,  576, 1582,  580, 500,  580, 1580,  580, 500,  578, 1602,  558, 1602,  558, 1600,  560, 1598,  560, 520,  560, 1600,  560, 1600,  560, 1600,  560, 518,  560, 520,  560, 520,  560, 520,  560, 1600,  560, 518,  560, 518,  560, 1600,  560, 1598,  560, 1600,  560, 520,  560, 518,  560, 518,  560, 520,  560, 520,  560, 520,  560, 520,  560, 518,  560, 1600,  560, 1600,  560, 1602,  558, 1600,  558, 1600,  560};`);
        Generator.addCode(`irsend.begin();`);
        Generator.addCode(`#if ESP8266`);
        Generator.addCode(`Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);`);
        Generator.addCode(`#else  // ESP8266`);
        Generator.addCode(`Serial.begin(115200, SERIAL_8N1);`);
        Generator.addCode(`#endif  // ESP8266`);
        Generator.addCode(`pinMode(14, INPUT);`);

       
    }
    
    //% block="发射[XINGHAO]空调遥控信号[COMMAND]" blockType="command"
    //% XINGHAO.shadow="dropdown" XINGHAO.options="XINGHAO" 
    //% COMMAND.shadow="dropdown" COMMAND.options="COMMAND" 
    export function FASHE(parameter: any, block: any) {
        let XINGHAO = parameter.XINGHAO.code;
        let COMMAND = parameter.COMMAND.code;
        
        Generator.addCode(`if (((XINGHAO==String("GREE")) && (COMMAND==String("ON")))) {`);
        Generator.addCode(`irsend.sendRaw(greeOn, 279, 38);  // Send a raw data capture at 38kHz.`);
        Generator.addCode(`Serial.println("midea hot on");`);
        Generator.addCode(`delay(500);}`);
        Generator.addCode(`if (((XINGHAO==String("GREE")) && (COMMAND==String("OFF")))) {`);
        Generator.addCode(`irsend.sendRaw(greeOff, 139, 38);  // Send a raw data capture at 38kHz.`);
        Generator.addCode(`Serial.println("midea hot off");`);
        Generator.addCode(`delay(500);}`);
        Generator.addCode(`if (((XINGHAO==String("MEIDI")) && (COMMAND==String("ON")))) {`);
        Generator.addCode(`irsend.sendRaw(mideahotOn, 299, 38);  // Send a raw data capture at 38kHz.`);
        Generator.addCode(`Serial.println("midea hot on");`);
        Generator.addCode(`delay(500);}`);
        Generator.addCode(`if (((XINGHAO==String("MEIDI")) && (COMMAND==String("OFF")))) {`);
        Generator.addCode(`irsend.sendRaw(mideahotOff, 199, 38);  // Send a raw data capture at 38kHz.`);
        Generator.addCode(`Serial.println("midea hot off");`);
        Generator.addCode(`delay(500);}`);

    }

}

评论

user-avatar