有很多错误,请大家指教
/*目前程序支持通过检测电流状态来判断是否执行继电器转换触点
* 支持微信消息推送,能实时根据电流状态向主题发送开关
* 智能语言控制控制,支持同时天猫、小爱、小度、google Assistent控制
* 也同时支持web控制、小程序控制、app控制,定时控制等
*
*/
#include <ESP8266WiFi.h> //WIFI库文件
#include <PubSubClient.h> //MQTT推送库文件
#include <ESP8266HTTPClient.h> //TCP库
//********************需要修改的部分*******************//
//const char* ssid = "**********"; //WIFI名字
//const char* password = "********"; //WIFI密码
const char* ssid = "*******"; //WIFI名字
const char* password = "********"; //WIFI密码
#define ID_MQTT "***************************" //用户私钥,控制台获取
const char* topic = "light001002"; //主题名字,可在巴法云控制台自行创建,名称随意
const int outputpin1 = D1; //单片机引脚值,D系列是NodeMcu引脚命名方式,用于继电器触点转换
const int outputpin2 = D2; //单片机引脚值,D系列是NodeMcu引脚命名方式
int currents; //定义电流为整数型变量
String uid = "************************"; // 用户私钥,巴法云控制台获取,用于微信推送消息
String msg = "";
String title = "客厅灯"; // 消息标题
String msg2 = "已打开"; //发送的消息
String msg3 = "已关闭";
//**************************************************//
String ApiUrl = "http://go.bemfa.com/v1/sendwechatcard";
bool relay="ture"; //定义布尔变量,用于继电器转换
bool cloudpush="false";//mqtt和微信消息推送布尔变量
const char* mqtt_server = "bemfa.com"; //默认,MQTT服务器
const int mqtt_server_port = 9501; //默认,MQTT服务器
WiFiClient Client;
WiFiClient espClient;
PubSubClient client(espClient);
HTTPClient http; //初始化http
void setup() {
pinMode(outputpin1, OUTPUT); //设置引脚为输出模式
pinMode(outputpin2, OUTPUT); //设置引脚为输出模式
Serial.begin(9600); //设置波特率9600,hlw8110的未9600
setup_wifi(); //设置wifi的函数,连接wifi
client.setServer(mqtt_server, mqtt_server_port);//设置mqtt服务器
client.setCallback(callback); //mqtt消息处理
}
void loop() {
if (!client.connected()) {
reconnect();
}
//状态实时反馈语句段
if(currents>10 && cloudpush=="false"){
statebackON();//电流状态返馈,反馈到mqtt服务器同步
doHttpStickON(); //微信消息推送函数
cloudpush="true";
}else if(currents<10 && cloudpush=="true"){
statebackOFF();//电流状态返馈,反馈到mqtt服务器同步
doHttpStickOFF();//微信消息推送函数
cloudpush="false";
}else{
Serial.println(" ”已开“/”已关“状态已推送至maqtt服务器,不在重复推送");
}
client.loop();
delay(10);
}
//wifi连接
void setup_wifi() {
delay(10);
//Serial.println();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("wait connect to wifi.");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//回调函数
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("get Topic:");
Serial.println(topic);
for (int i = 0; i < length; i++)
{
msg += (char)payload[i];
}
Serial.print("Msg:");
Serial.println(msg);
if (msg == "on" && currents<10) //如果接收字符on,且电流小于10ma,亮灯
{
SwitchRelay();//继电器触点转换
Serial.println("switch relay succeed");
}
else if (msg == "off"&¤ts>=10)//如果接收字符off,且电流大于10ma,灭灯
{
SwitchRelay();//继电器触点转换
Serial.println("switch relay succeed");
}
else if (msg == "off" && currents<10)
{
Serial.println("Closed. Please do not repeat order.");
}
else if (msg == "on"&& currents>=10){
Serial.println("Opened. Please do not repeat order.");
}
else{}
msg = "";
}
//mqtt重连函数
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(ID_MQTT)) {
Serial.println("connected");
Serial.print("subscribe:");
client.subscribe(topic);
Serial.println(topic);
//订阅主题,如果需要订阅多个主题,可发送多条订阅指令client.subscribe(topic2);client.subscribe(topic3);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);} }
}
//继电器触点转换
void SwitchRelay(){
if(relay){ //通过布尔函数对继电器连接的触点进行切换
digitalWrite(outputpin1,HIGH); //D2为此处的引脚编号,根据需要更改-
delay(70); //脉冲电流宽度>=50ms,括弧单位毫秒
digitalWrite(outputpin1,LOW);
relay=false;
}else if (!relay){
digitalWrite(outputpin2,HIGH); //D5为此处的引脚编号,根据需要更改-
delay(70);
digitalWrite(outputpin2,LOW);
relay=true;}
}
//电流状态返馈,反馈到mqtt服务器同步
void statebackON(){
String litemsg1 = "on" ;//数据封装 状态关#亮度100
client.publish(topic, litemsg1.c_str());//mqtt数据上传
}
void statebackOFF(){
String litemsg2 = "off" ;//数据封装 状态关#亮度100
client.publish(topic, litemsg2.c_str());
}//mqtt数据上传}
//******微信消息推送函数********//
void doHttpStickON(){ //微信消息推送函数
http.begin(Client,ApiUrl+"?uid="+uid+"&title="+title+"&msg="+msg2); //初始化请求
int httpCode = http.GET(); //发送请求
if (httpCode > 0) { // 检查状态码
String payload = http.getString(); //获取响应信息
Serial.println(payload); } //打印响应信息
http.end(); //关闭http
}
void doHttpStickOFF(){ //微信消息推送函数
http.begin(Client,ApiUrl+"?uid="+uid+"&title="+title+"&msg="+msg3); //初始化请求
int httpCode = http.GET(); //发送请求
if (httpCode > 0) { // 检查状态码
String payload = http.getString(); //获取响应信息
Serial.println(payload); } //打印响应信息
http.end(); //关闭http
}