开关灯辅助工具+ESP12F模组,如何实现通过一个手机APP控制寝室灯开关
01 介绍
本项目要实现的是一个通过手机APP控制寝室灯开关的辅助工具。
项目框图如下图所示。
实现原理
手机和本模块都接入同一个wifi网络,手机端发送命令,本模块执行相应的命令。
开关灯,通过舵机来进行实现。
02 硬件设计
2.1 主控
ESP8266串口WIFI ESP-12F
ESP8266-12F是ESP8266-12的增强版。
2.2 原理图设计
2.2.1 控制板
本项目实际上只需要一个GPIO口来控制舵机即可。
将其他的引脚引入是为了后续可能扩展其他功能使用。
2.2.2 电源板
ESP12F模组3.3v供电,舵机5v供电。
使用了一片AMS1117-3.3v和一片AMS1117-5v芯片,实现12v至3.3v和5v的转换。
( 由于寝室开关座子附近有一个插座,所以就直接找了一个输入220v输出12v点的电源线,作为电源板的输入电源 )
2.3 PCB设计
2.3.1 控制板PCB
需要注意ESP12F模组天线部分的布局,与周围的PCB要有大于5mm的间距。
2.3.2 电源板PCB
03 软件设计
3.1 控制程序
开发环境使用的是Arduino IDE。
要实现的功能有两大块:舵机的控制、UDP网络通信
WiFI-UDP通信参考:ESP8266 – WiFiUDP库 – 太极创客 (taichi-maker.com)
通信协议较为简单,命令长度为2个字节,第1个字节为固定值0xff,第2个字节为相应的控制码( 0x00: 关灯,0x01开灯 )
通信的安全性,在通信过程中并没有做握手、认证等处理。通信用户的有效性是通过wifi密码来鉴别的( 只有成功连接wifi,才可以控制灯的开关 )。
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
/*********************** 舵机相关 ************************/
// 连接舵机的引脚
#define STEER_PIN 13
typedef enum SWITCH_STATE{
SWITCH_ON,
SWITCH_OFF
}SWITCH_STATE;
typedef struct SWITCH_CONTROL{
u16 switch_on;
u16 switch_off;
SWITCH_STATE switch_state;
}SWITCH_CONTROL;
void Steer_Init_PWM(){
pinMode(STEER_PIN,OUTPUT);
}
/**
* 根据pwm高电平时间(us)控制舵机
*/
void Steer_SetAngle_PWM(u16 pwm) {
u8 index = 0;
// 控制舵机转动
for(index = 0;index<10;index++){
digitalWrite(STEER_PIN,HIGH);
delayMicroseconds(pwm);
digitalWrite(STEER_PIN,LOW);
delayMicroseconds(20000 - pwm);
}
}
SWITCH_CONTROL switch_contrl = {
.switch_on = 2300,
.switch_off = 1400,
.switch_state = SWITCH_OFF
};
void Change_Switch_State( u8 switch_state ) {
if( switch_state == SWITCH_ON){
Steer_SetAngle_PWM(switch_contrl.switch_on);
switch_contrl.switch_state = SWITCH_ON;
}else if(switch_state == SWITCH_OFF){
Steer_SetAngle_PWM(switch_contrl.switch_off);
switch_contrl.switch_state = SWITCH_OFF;
}else{
}
}
/*******************************************************/
/*********************** WIFI相关 ***********************/
typedef enum WIFI_STATE{
WIFI_OK,
WIFI_ERROR,
UDP_OK,
UDP_ERROR
}WIFI_STATE;
typedef enum USER_CMD {
CMD_ERROR,
CMD_SWITCH_ON,
CMD_SWITCH_OFF
}USER_CMD;
#define UDP_PORT 6666
#define BUF_LEN 20
const char* ssid = "xxxxx"; //wifi name
const char* passwd = "xxxxx";//wifi passwd
// buf
unsigned char udp_buf[BUF_LEN] = {0};
WiFiUDP Udp;
u8 WIFI_Init(const char* wifi_ssid, const char* wifi_passwd){
u8 counter = 0;
WiFi.begin(wifi_ssid, wifi_passwd);
while (WiFi.status() != WL_CONNECTED) {
counter++;
delay(500);
//10秒后如果还是连接不上,就判定为连接超时
if (counter > 20) return WIFI_ERROR;
}
return WIFI_OK;
}
u8 UDP_Init(u16 port) {
if(Udp.begin(port)){ //启动Udp监听服务
return UDP_OK;
}else {
return UDP_ERROR;
}
}
u8 Get_UDP_Packet(unsigned char * buf,u8 buf_len){
int packetSize = Udp.parsePacket();//获得解析包
if(Udp.available()){
return Udp.read(buf, buf_len);
}else{
return 0;
}
}
/**
* 定义报文格式
* 1B 1B
* 0xff cmd
* 开关灯的cmd: 0x00:关灯 0x01:开灯
*/
u8 Parse_UDP_Packet(unsigned char * data,u8 data_len){
if( data[0] != 0xff ) return CMD_ERROR;
if( data[1] == 0x00 ) return CMD_SWITCH_OFF;
else if( data[1] == 0x01 ) return CMD_SWITCH_ON;
else return CMD_ERROR;
}
void Execute_Cmd(u8 cmd){
switch( cmd ) {
case CMD_SWITCH_ON:
Change_Switch_State(SWITCH_ON);
break;
case CMD_SWITCH_OFF:
Change_Switch_State(SWITCH_OFF);
break;
default:
break;
}
}
/*******************************************************/
void setup() {
Serial.begin(9600); // 波特率9600
Steer_Init_PWM();
if(WIFI_Init(ssid,passwd) == WIFI_OK) {
Serial.println(WiFi.localIP()); // 打印ip地址
if( UDP_Init(UDP_PORT) ) {
Serial.printf("UDP监听端口:%d\r\n",UDP_PORT);
}else{
Serial.println("UDP Init Failed");
}
}else{
Serial.println("WIFI Init Failed");
}
}
void loop() {
u8 datalen = Get_UDP_Packet(udp_buf,BUF_LEN);
if( datalen == 0 ) return ;
u8 user_cmd = Parse_UDP_Packet(udp_buf,datalen);
if( user_cmd == CMD_ERROR ) return;
Execute_Cmd(user_cmd);
}
3.2 手机APP程序
使用Flutter开发手机APP,实现遥控灯的开关。
界面设计较为简单,只有两个功能按键,分别对应灯的开与关。
APP工程代码:wa-kakalala/NanoClient: Flutter App (github.com)
04 外壳设计
05 结果展示
将辅助工具与灯座进行固定,使用的是纳米胶。( 直接粘在灯座上,不要粘在墙上-->直接导致墙皮脱落)
( 这里使用了一块黑色的废PCB板的原因,这个开关座子是一个双开开关,控制两个灯,粘上了一块板子将一个双开开关合成一个整体 )
06 附件
- |
- +1 赞 0
- 收藏
- 评论 0
本文由赵优秀转载自安信可科技,原文标题为:【电子DIY作品】开关灯辅助工具+ESP12F模组,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
安信可星闪模组专属ComboAT初体验:点对点连接实现透传,强抗干扰、超低延迟、超远通讯
Ai-BS21-32S是由深圳市安信可科技有限公司开发的蓝牙星闪模块。本文中安信可科技将为大家介绍星闪模组Ai-BS21-32S的使用方法。
【经验】如何将安信可科技的PB-03F模块升级DTM固件进行认证测试?
使用安信可科技的蓝牙模组PB-03F进行产品设计后期,部分产品需要连同PB-03F模块一同送去认证机构进行认证测试,此时需要给蓝牙模组PB-03F烧录特殊的测试固件DTM。本文指导如何给PB-03F模块烧写DTM固件。
利用LESS简单实现网页一键换肤功能, 爱星物联网页换肤原来如此简单
本期分享的内容介绍了用变量来实现快速换肤,目的在于让大家快速适应新品方案的开发,更多资料可从安信可科技官网上获取。
安信可科技(Ai-Thinker)物联网专用模组&天线选型指南
目录- LoRa product Radar product WiFi+Bluetooth products 2.4G Series Module GPS Series Module UWB & 4G series module GPRS series module Offline Voice Module Series Antenna
型号- RA-01SH,PB-02-KIT,RTL8720 SERIES,AI-WB1,AI-WB2,AI-WB2-M1,HI-07S-KIT,TB-02-KIT,AI-WB2-12F-KIT,AI-WB2-13-KIT,AI-WB2-13U,AI-WB2-01S,A9,SX1268,RA-01SC,TG-02-KIT,PB SERIES,RTL8710BX SERIES,GPS SERIES,AI-WB2-01M,VC-01-KIT,HI-12F,TB SERIES,HI-12F-KIT,BW16,AI-WB2 SERIES,BW15,BW14,TG-12F-KIT,BW12,RTL8710BX,A9G,HI SERIES,AI-WB2-12S,PB-03,SX126X,AI-WB1-32S,HI-07S,HI-07SL-KIT,PB-01,PB-02,RG-02,AI-WB1-32S-KIT,RTL8720DN,AI-WB2-12F,TG-01M,AI-WB1SERIES,NF-05,NF-02-PA,NF-04,NF-03,BW16-KIT,NF-01-S,SX127X,TB-03F-KIT,LLCC68,TG-02,AI-WB2-07S,NF-01-N,NF-02-PE,AI-WB1-32S-CAM,GP-02-KIT,AI-WB2-M1-I,TG-02M-KIT,TG-02M,RA-08-KIT,GP-01,GP-02,CA-01-KITC,CA-01,2.4G SERIES,AI-WB2-13,PB-03F,PB-03M,TG SERIES,TB-04-KIT,TB-05,GPRS SERIES,TB-04,TG-02F,TB-02,RTL8720DN SERIES,TG-02F-KIT,4G SERIES,PB-03M-KIT,AI-WB2-32S-KIT,BU01,RA-01,PB-03-KIT,ESP32-G,RTL8720,RA-08H,NF-04-MI,VC-02-KIT,NF-05-S,RA-01S,HI-12FL,RA-01H,HI-07SL,AI-WB2-32S,RA-01SCH,PB-01-KIT,RTL8720CF,TG-01M-KIT,TG-12F,AI-WB1-A1S,AI-WB1-12F,TB-03F,BW15-KIT,GPRS,UWB SERIES,GP-01-KIT,AI-WB1-12F-KIT,NODEMCU-BU01,RA-08H-KIT,RD-01,RA-02,RTL8720CF SERIES,RA-08,VC-02,VC-01,HI-12FL-KIT,PB-03F-KIT
【IC】安信可科技发布2款UWB模组BU03和BU04,实现室内厘米级高精度测距定位
BU03和BU04这两款定位模组使用的芯片都是一样的,不同的是BU03是没有带主控MCU的,并且体积小巧,可以集成到自己的主板上,用主芯片直接驱动。
安信可科技无线模组选型表
提供安信可科技无线模组选型,封装:DIP/SMD,尺寸:10.3mm*9.9mm*2.4(±0.2)mm-120.0mm*120.0mm*30.0mm,通信接口:UART/GPIO/ADC/PWM/I?C/SPI/Touch senser/PSRAM/SDIO/Duplex I²S/麦克风/扬声器,最大速率:2.5mW-100mW,参考距离:80m-5km,供电电压:1.9V-5.25V
产品型号
|
品类
|
封装
|
尺寸(mm)
|
通信接口
|
最大速率(mW)
|
参考距离(m/km)
|
供电电压(V)
|
空中速率(Kbps/Mbps)
|
天线形式
|
工作温度(℃)
|
NF-01-S
|
2.4G模组
|
DIP-8
|
28.6mm*15.3mm
|
SPI
|
5mW
|
240m
|
1.9V-3.6V
|
250Kbps-2Mbps
|
板载天线
|
-20℃~70℃
|
选型表 - 安信可科技 立即选型
【产品】安信可科技WIFI蓝牙二合一模块Ai-WB2系列通过各项性能测试,实测400-500米传输距离
天线作为无线信号辐射和接收的重要器件,有着不可替代的作用。一款天线设计完成后需要经过测试才能确定其性能是否符合设计要求。那么天线性能需要进行哪些性能测试呢?本文以安信可的Ai-WB2-12F模块为例,看看如何测试PCB天线的性能。
安信可科技上线的LoRa模块Ra-01SCH-P,抗干扰性强,可支持长达10km的远距离传输
Ra-01SCH-P是安信可科技设计开发的LoRa系列模组。该模组用于超长距离扩频通信,其射频芯片LLCC68+主要采用 LoRa™远程调制解调器,用于超长距离扩频通信,抗干扰性强,能够最大限度降低电流消耗。
【元件】安信可科技24G人体存在感应雷达模组Rd-01搭载博流BL602芯片+矽典微的S3KM111L芯片,适用于高精准度场景
安信可自主研发的24GHz雷达模组搭载博流BL602芯片+矽典微的S3KM111L芯片,不仅能够正常检测人体存在、移动及微动,还可以检测出人体完全静止状态,解决了传统PIR人体红外感应在人体处于静止状态时就无法检测的痛点。
安信可科技Rd-04低成本低功耗雷达模组赋能照明行业,适合嵌入式隐蔽设计
安信可科技Rd-04是基于富奥星的XBR818芯片而设计的微动、运动感知模组。其中心频率为10.525GHz,基于多普勒雷达原理,芯片内置算法,无需外挂单片机,超高性价比。主要针对低成本或低功耗的应用领域,该产品定位为微动、运动感知场景应用,适合壁挂或吸顶安装。
安信可科技针对物联网设计通用型蓝牙模组符合BLE 5.0,智能手机Mesh组网,可对接天猫精灵
安信可科技针对物联网设计通用型的蓝牙模组,其功能强大、用途广泛。可以用于智能灯、智能插座、智能空调等其他智能家电。同时符合BLE 5.0及SIG Mesh规范,可直接通过智能手机组建Mesh网络,也可对接天猫精灵等智能音箱,适用于多种智能家居应用场景。
安信可科技(Ai-Thinker)2.4G模组选型表
描述- 2.4G系列模组是安信可科技有限公司自主设计开发的一系列模组。目前主要有进口,台产和邦定三个系列, 能够满足不同客户群体的需求。可广泛应用于各种物联网场合,适用于无线鼠标、无线遥控、体感设备、有源RFID、 NFC、低功耗自组网无线传感网节点等,是物联网应用的理想解决方案。
型号- NF-02-PA,NF-04,NF-03,NF-01-S,NF-02-SM,NF-04-MI,NF-01-N,NF-02-PE
在爱星物联,如何上传OTA固件,如何对不同类型的OTA进行升级?
安信可科技讲解如何上传OTA固件和不同类型的OTA升级方式,从模组日志和APP上如何查看OTA是否升级成功,开放平台查看升级记录。
电子商城
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可定制LED组件/LED传感/UV模组的电压、电流、波长等性能参数,电压:3-24V,,电流:30-3500mA,波长:270-940nm;材质:食品级POM,阻燃PC;防水等级:IP20-IP68。
最小起订量: 1000 提交需求>
登录 | 立即注册
提交评论