求助电力监控系统 PZEM-004T联网后一直重启
本帖最后由 chuanping87 于 2020-5-17 13:02 编辑原帖在这里:https://www.arduino.cn/thread-97032-1-1.html,
设备连接网络后一直重启,,app开关。有时候正常有时候失效,希望有大神帮我看出问题解决一下,谢谢#define BLINKER_WIFI
#define BLINKER_ALIGENIE_OUTLET
#define BLINKER_ESP_SMARTCONFIG
#include <Blinker.h>
BlinkerButton Button1("btn-abc"); // 开关
BlinkerNumber Voltage("voltage"); // 电压
BlinkerNumber Current("current"); // 电流
BlinkerNumber Power("power"); // 功率
BlinkerNumber Energy("energy"); // 电量
BlinkerNumber Frequency("frequency"); // 频率
BlinkerNumber Pf("pf"); // 功率因数
BlinkerNumber Electriccharge("electriccharge"); // 电费
BlinkerNumber Temperature("temperature"); // 温度
BlinkerNumber Humidity("humidity"); // 湿度
char auth[] = "";//密钥
//char ssid[] = "";//wifi名
//char pswd[] = "";//wifi密码
#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(D5, D6);
#define ELECTROVALENCE 0.5469 //电价
#include <U8g2lib.h>
#define SCLD4 //D4
#define SDAD3 //D3
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);
#include <DHT.h>
#define DHTPIN D2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define LED_PIN1 D0
#define KEY_PIN1 D1
void readpzem()
{
float humidity = dht.readHumidity();
if ( !isnan(humidity) ) {
Serial.print("Humidity: "); Serial.print(humidity); Serial.println("%");
} else {
humidity = 0;
Serial.println("Error reading Humidity");
}
float temperature = dht.readTemperature();
if ( !isnan(temperature) ) {
Serial.print("Temperature: "); Serial.print(temperature); Serial.println("°C");
} else {
temperature = 0;
Serial.println("Error reading Temperature");
}
float voltage = pzem.voltage();
if( !isnan(voltage) ){
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
} else {
voltage = 0;
Serial.println("Error reading voltage");
}
float current = pzem.current();
if( !isnan(current) ){
Serial.print("Current: "); Serial.print(current); Serial.println("A");
} else {
current = 0;
Serial.println("Error reading current");
}
float power = pzem.power();
if( !isnan(power) ){
Serial.print("Power: "); Serial.print(power); Serial.println("W");
} else {
power = 0;
Serial.println("Error reading power");
}
float energy = pzem.energy();float electriccharge = 0;
if( !isnan(energy) ){
electriccharge = energy * ELECTROVALENCE;
Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
Serial.print("electriccharge: "); Serial.println(electriccharge,3);
} else {
energy = 0;
Serial.println("Error reading energy");
}
float frequency = pzem.frequency();
if( !isnan(frequency) ){
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
} else {
frequency = 0;
Serial.println("Error reading frequency");
}
float pf = pzem.pf();
if( !isnan(pf) ){
Serial.print("PF: "); Serial.println(pf);
} else {
pf = 0;
Serial.println("Error reading power factor");
}
Serial.println();
Voltage.print(voltage);
Current.print(current);
Power.print(power);
Energy.print(energy);
Frequency.print(frequency);
Pf.print(pf);
Electriccharge.print(electriccharge);
Temperature.print(temperature);
Humidity.print(humidity);
Button1.color(digitalRead(LED_PIN1) ? "#FF0000" : "#00FF00");Button1.print(digitalRead(LED_PIN1) ? "off" : "on");
delay(2000);
u8g2.setFont(u8g2_font_wqy12_t_gb2312a);
u8g2.setFontDirection(0);
u8g2.clearBuffer();
u8g2.setCursor(0, 13);u8g2.print("温度");u8g2.print(temperature, 1);u8g2.print("°C");
u8g2.setCursor(64, 13);u8g2.print("湿度");u8g2.print(humidity, 0);u8g2.print(" %");
u8g2.setCursor(0, 26);u8g2.print("电压");u8g2.print(voltage, 1);u8g2.print("V");
u8g2.setCursor(64, 26);u8g2.print("电流");u8g2.print(current, 2);u8g2.print("A");
u8g2.setCursor(0, 38);u8g2.print("功率");u8g2.print(power, 1);u8g2.print(" W");
u8g2.setCursor(64, 38);u8g2.print("电量");u8g2.print(energy, 2);u8g2.print("Wh");
u8g2.setCursor(0, 50);u8g2.print("频率");u8g2.print(frequency, 1);u8g2.print("Hz");
u8g2.setCursor(64, 50);u8g2.print("因数");u8g2.print(pf, 2);u8g2.print(" L");
u8g2.setCursor(0, 62);u8g2.print("电费");u8g2.print(electriccharge, 2);u8g2.print(" $");
u8g2.setCursor(64, 62);u8g2.print("开关");u8g2.print(digitalRead(LED_PIN1) ? "off" : "on");
u8g2.sendBuffer();
}
void checkButton()
{
if ( digitalRead(KEY_PIN1) == LOW )
{
Blinker.delay(50);
if( digitalRead(KEY_PIN1) == LOW )
{while( digitalRead(KEY_PIN1) == LOW );
digitalWrite(LED_PIN1, !digitalRead(LED_PIN1));//输出反向
BLINKER_LOG(__func__,":",digitalRead(LED_PIN1));//日志
readpzem();
//Button1.color(digitalRead(LED_PIN1) ? "#0000FF" : "#00FFFF");Button1.print(digitalRead(LED_PIN1) ? "off" : "on");
}
}
}
void button1_callback(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LED_PIN1, LOW);
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_PIN1, HIGH);
}
readpzem();
//Button1.color(digitalRead(LED_PIN1) ? "#00FFFF" : "#0000FF");Button1.print(digitalRead(LED_PIN1) ? "off" : "on");
}
void aligeniePowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LED_PIN1, LOW);
BlinkerAliGenie.powerState("on");
BlinkerAliGenie.print();
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_PIN1, HIGH);
BlinkerAliGenie.powerState("off");
BlinkerAliGenie.print();
}
readpzem();
//Button1.color(digitalRead(LED_PIN1) ? "#00FFFF" : "#0000FF");Button1.print(digitalRead(LED_PIN1) ? "off" : "on");
}
void aligenieQuery(int32_t queryCode)
{
BLINKER_LOG("AliGenie Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.powerState(digitalRead(LED_PIN1) ? "off" : "on");
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("AliGenie Query Power State");
BlinkerAliGenie.powerState(digitalRead(LED_PIN1) ? "off" : "on");
BlinkerAliGenie.print();
break;
default :
BlinkerAliGenie.powerState(digitalRead(LED_PIN1) ? "off" : "on");
BlinkerAliGenie.print();
break;
}
}
void heartbeat()
{
BLINKER_LOG("heartbeat ");
readpzem();
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
}
void setup() {
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_PIN1, OUTPUT);
digitalWrite(LED_PIN1, LOW);
pinMode(KEY_PIN1, INPUT_PULLUP);
//Blinker.begin(auth, ssid, pswd);
Blinker.begin(auth);
Blinker.attachData(dataRead);
Blinker.attachHeartbeat(heartbeat);
BlinkerAliGenie.attachPowerState(aligeniePowerState);
BlinkerAliGenie.attachQuery(aligenieQuery);
Button1.attach(button1_callback);
dht.begin();
u8g2.begin();
u8g2.enableUTF8Print();
readpzem();
}
void loop() {
Blinker.run();
checkButton();
} 问题有解决吗。 bohemianman 发表于 2020-5-21 15:27
问题有解决吗。
还没有
要用硬串口,用软串口有问题 回调中不能用delay 奈何col 发表于 2020-7-10 09:06
回调中不能用delay
那应该用啥回调,版主大大能稍做修饰完善一下代码吗?配件搞回来都起灰了,一直处理不了 雨梦随行 发表于 2020-7-10 14:47
那应该用啥回调,版主大大能稍做修饰完善一下代码吗?配件搞回来都起灰了,一直处理不了 ...
这个只有自己尝试了,你的lib是否支持8266我也不清楚
页:
[1]