Boa tarde a todos,
Vou dar um exemplo de como usar o modo low energy do ESP8266 junto com o ScadaBR, já que não é possível usando o protocolo ModBus.
1° passo: Crie um Datasource HTTP Receiver
Você pode usar a ferramenta de receptor http para testar.
2° passo: Crie os Datapoints que serão usados
3° passo: Use o código no ESP
#include <ESP8266WiFi.h> //biblioteca wifi
#include <ESP8266HTTPClient.h> //biblioteca do http
#include “DHT.h” //biblioteca do dht11, adafruit
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE); //configuração do tipo de sensor
//#include <OneWire.h>
//#include <DallasTemperature.h>
//const int oneWireBus = 4;
//OneWire oneWire(oneWireBus);
//DallasTemperature sensors(&oneWire); //caso for usar o ds18b20, descomente
const char* ssid = “wifi”;
const char* password = “senha”; //sua wifi e senha
const char* host = “http://192.168.1.236:8080/ScadaBR/httpds”; //use o ip do seu scadabr e a porta, mas mantenha o /httpds
const int analogInPin = A0;
float sensorValue = 0; //pino pra tirar uma amostra de tensão da bateria
String valor = “”;
float h;
float t;
void setup()
{
Serial.begin(74880);
Serial.println();
Serial.printf(“Connecting to wifi”);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(“.”);
}
Serial.println(" connected");
}
void loop() {
HTTPClient http;
http.begin(host);
http.addHeader(“Content-Type”, “application/x-www-form-urlencoded”);
//float temperatureC = sensors.getTempCByIndex(0);//leitura de temperatura do ds
do{
delay(100);
h = dht.readHumidity();
t = dht.readTemperature();
sensorValue = analogRead(analogInPin);
}while((isnan(h) || isnan(t) || isnan(sensorValue)));//lê temperaturas
valor=(String)“tensao=”+sensorValue+“&temp=”+t+“&umi=”+h;//monta a string pro POST, no formato variavel1=valor1&variavel2=valor2 e assim por diante
http.POST(valor);
http.writeToStream(&Serial);
http.end();//posta e encerra a conexão
ESP.deepSleep(300e6);//bota o esp pra dormir, 300 segundos, 5 minutos
}
4°passo: Conecte o pino GPIO16 ao pino RST pra permitir o ESP acordar do deepsleep
5° passo: Use um divisor de tensão para amostrar o valor de tensão da bateria no pino ADC0
6° passo: Configure um Datasource virtual pra converter o valor recebido do ADC em volts, ou edite o código pra fazer isso no próprio ESP.
Pronto! Agora é só configurar de acordo com o gosto, inclusive monitorar a bateria. Em meus testes tive o consumo de 70mA em transmissão e 9mA em modo sleep sem nenhuma modificação da placa.
No exemplo eu estou utilizando um módulo ESP-01 com um “shield” DHT11 e uma bateria 16850 diretamente nos pinos do regulador. Note que tive que soldar fios diretamente dos pinos GPIO16 e ADC0 do ESP.
Quando tiver resultados de duração de bateria posto.