|
楼主 |
发表于 2021-9-25 17:08
|
显示全部楼层
/* 该代码是爆改车间主任基于点灯科技平台
* 控制baogaoMCU开发板通过433Mhz收发模块
* 学习433遥控信号和发射433遥控信号代码
* 代码中使用eeprom存储接收从app中发送来的控制数据
* 当用语音助手控制开关是从eeorom中读取数据
* 从而达到脱机学习功能
* 爆改车间车间主任共享代码不可商用
* 转发需取得主任同意并备注出处
* 关注"爆改车间"微信公众号获取更多资源
*/
#include <RCSwitch.h> //射频模块控制库 从IDE的库管理中直接下载
#include <EEPROM.h>
RCSwitch mySwitch = RCSwitch();
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
//#define BLINKER_ESP_SMARTCONFIG
#include <Blinker.h>
char auth[] = "fbc79f6b7295"; //key
char ssid[] = "iPhone"; //ssid
char pswd[] = "11111111"; //password
BlinkerButton ButtonSW("sw"); //发送遥控信号的统一按键的数据键名
BlinkerButton ButtonSW433("sw433");
BlinkerButton ButtonRead("read"); //学习开关的数据键名
BlinkerText Textcode("code"); //文件显示的数据键名
bool abc=0;
bool stu = 0;
char code[30];
void button_SW_callback(const String & state) //发射数据按键通过自定承载内容发送信号值
{
mySwitch.setPulseLength(184);
BLINKER_LOG("get button state: ", state);
mySwitch.send(state.toInt(), 24);
delay(1000);
}
//void button_SW433_callback(const String & state1) //发射数据按键通过自定承载内容发送信号值
//{
// mySwitch.setPulseLength(350);
// BLINKER_LOG("get button state1: ", state1);
// mySwitch.send(state1.toInt(), 24);
// delay(1000);
//}
void button_Read_callback(const String & state){
if (state == BLINKER_CMD_ON) {
BLINKER_LOG("Toggle on!");
ButtonRead.print("on");
stu = 1;
}
else if (state == BLINKER_CMD_OFF) {
BLINKER_LOG("Toggle off!");
ButtonRead.print("off");
stu = 0;
}
Serial.print(stu);
}
void put_code(int a,String c){ //写eeprom函数 参数1:地址 参数2:内容
EEPROM.begin(4096);
EEPROM.put(a, c.length());
for (int i = 0; i < c.length(); i++){
EEPROM.put(a + 1 + i, c[i]);
}
EEPROM.commit();
EEPROM.end();
}
String get_code(int a){ //读eeprom函数 参数:地址
EEPROM.begin(4096);
String c = "";
for (int i = 0; i < EEPROM.read(a); i++){
c += char(EEPROM.read(a + 1 + i));
}
return c;
EEPROM.end();
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data); //通过调试窗口发送要存储的数据
String d="";
if(data.indexOf("ON") != -1){ //如果"ON"开头 在3000地址存储开信号
put_code(3000,data.substring(2));
d=get_code(3000);
}else if(data.indexOf("OFF") != -1){ //如果"OFF"开头 在3100地址存储关信号
put_code(3100,data.substring(3));
d=get_code(3100);
}
BLINKER_LOG("存储数据:", d);
Blinker.print("存储数据:", d);
}
void heartbeat()
{
}
//void miotPowerState(const String & state)
//{
// BLINKER_LOG("need set power state: ", state);
//
// if (state == BLINKER_CMD_ON) {
// digitalWrite(LED_BUILTIN, HIGH);
//
// BlinkerMIOT.powerState("on");
// BlinkerMIOT.print();
// String c=get_code(3000);
// mySwitch.send(c.toInt(), 24);
// BLINKER_LOG("发射数据:", c);
// Blinker.print("发射数据:", c);
//
// }
// else if (state == BLINKER_CMD_OFF) {
// digitalWrite(LED_BUILTIN, LOW);
//
// BlinkerMIOT.powerState("off");
// BlinkerMIOT.print();
// String c=get_code(3100);
// mySwitch.send(c.toInt(), 24);
// BLINKER_LOG("发射数据:", c);
// Blinker.print("发射数据:", c);
//
// }
//}
void setup()
{
Serial.begin(115200);
mySwitch.enableTransmit(0); //定义433发射模块的接口位D0
mySwitch.enableReceive(2);
// if(abc==0)
// {
// mySwitch.setPulseLength(184);
//
// }
// else if (abc==1)
// {
// mySwitch.setPulseLength(350);
//
// }
Blinker.begin(auth, ssid, pswd); //定义433接受模块的接口位D2
BLINKER_DEBUG.stream(Serial);
pinMode(2, INPUT_PULLUP);
// BlinkerMIOT.attachPowerState(miotPowerState);
Blinker.attachData(dataRead);
ButtonSW.attach(button_SW_callback);
ButtonSW433.attach(button_SW_callback);
ButtonRead.attach(button_Read_callback);
}
void loop()
{
Blinker.run();
//Blinker.delay(200);
if (stu == 1){
if (mySwitch.available()) {
Serial.print("Received ");
Serial.print( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Textcode.print(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength());
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
mySwitch.resetAvailable();
}
}
} |
|