Par contre j'ai un problème de téléchargement de croquis et mon Wemos est mort.
J'en ai placé un 2ème et toujours le même problème.
J'ai eu l'idée de télécharger hors câblage et cela a fonctionné !...
Si vous pouviez me dire ce qui cloche ? car une fois remis sur le breadboard; il fonctionne comme prévu. (en sachant que je télécharge sans la batterie 18650 branchée !)
Ici, le nouveau croquis de test en test (et donc pas encore validé) :
//#include <SerialESP8266wifi.h>
#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
/*
Test de la batterie avec ADS1115
infos intéressantes : https://passionelectronique.fr/tutorial-ads1115/
Batterie 18650 :
nominal 3.7v
Maximal 4.2v
Minimal 2.75v
L'expérience montre qu'il vauit mieux arrêter juste en-dessous de 3.5 volts
L'I2C est géré par la librairie ADS1X15, donc pas de Wire !
*/
#include "ADS1X15.h" //https://github.com/RobTillaart/ADS1X15
ADS1115 ADS(0x48); // ADS1115 physiquement défini à l'adresse 0x48
/*
#include <Wire.h>
const int sclPin = D1;
const int sdaPin = D2;
*/
const char* nom = "test_ads1115";
#include <ESP8266WiFi.h> // Import ESP8266 WiFi library
#include <PubSubClient.h>// Import PubSubClient library to initialize MQTT protocol
//WIFI
const char* ssid = "sssssss";
const char* password = "pppppp";
//MQTT
const char* mqtt_server = "192.168.0.51";//Adresse IP du Broker Mqtt (pi3-TFA)
const int mqttPort = 1883; //port utilisé par le Broker
WiFiClient espClient;
PubSubClient client(espClient);
char msg[50];
// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
// variables pour date et heure
int currentHour = 0;
int currentMinute = 0;
int currentSecond = 0;
int currentDay = 0;
int currentMonth = 0;
int currentYear = 0;
int nbreJoursMois[] = {31, 28, 31, 30, 31, 30, 31, 31, 31, 31, 30, 31};
void setup() {
Serial.begin(115200); // open Serial Monitor and set baud rat
ADS.begin();
ADS.setGain(0); // ± 6.144 volt (par défaut).
ADS.setMode(1); // 0 = CONTINUOUS, 1 = SINGLE (default)
ADS.setDataRate(0); // On spécifie la vitesse de mesure de tension qu'on souhaite, allant de 0 à 7 (7 étant le plus rapide, soit 860 échantillons par seconde)
ADS.readADC(0); // Et on fait une lecture à vide, pour envoyer tous ces paramètres
pinMode(D4, OUTPUT);
digitalWrite(D4, HIGH);
// Connect to Wi-Fi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Initialize a NTPClient to get time
timeClient.begin();
timeClient.setTimeOffset(3600); // Set offset time in seconds to adjust for your timezone, // GMT +1 = 3600
// MTTQ
client.setServer(mqtt_server, 1883);
}
void loop() {
digitalWrite(D4, LOW); /* éteindre la LED le temps de la mesure
jusqu'à la reprise de l'attente.
Provoque un léger clignotement */
// Mesure de la tension
//int16_t tension = ADS.readADC(0); // Mesure de tension de la broche A0, par rapport à la masse
int16_t mesure_A0 = ADS.readADC(0);
float tension = ADS.toVoltage(mesure_A0); /*
Valeur exprimée en volts dont l’amplitude sera automatiquement
calculée en fonction du gain préalablement choisi */
lectureNTP();
int tg = int(tension);
int td = int((tension - tg) * 100);
// préparation message MQTT
sprintf(msg, "%02d/%02d/%04d %02d:%02d:%02d %s %02d%s%02d",
currentDay, currentMonth, currentYear, currentHour, currentMinute, currentSecond,
nom, tg, ".", td );
Serial.println(msg);
reconnect();
if (tension < 3.5) {
/* ATTENTION - IMPORTANT
=====================
Deep sleep mode :
the ESP8266 wakes up by itself when GPIO 16 (D0 in NodeMCU board)
is connected to the RESET pin
=============================
L'argument µS est le nombre de micro secondes souhaité avant le réveil.
Il s'agit d'un entier codé sur 32 bits => donc 2^32 = 4 294 967 296 µs
= Environ 4294s = environ 71 minutes.
Cette mise en sommeil ne pourra donc excéder 71 minutes (sauf si µS = 0)
Si µS = 0 alors la mise en sommeil durera jusqu'à ce qu'un signal externe
vienne réveiller le microcontrôleur.
Il ne pourra pas y avoir de réveil automatique par l'envoi d'un signal de la part de l'horloge RTC.
*/
sprintf(msg, "%02d/%02d/%04d %02d:%02d:%02d %s %s",
currentDay, currentMonth, currentYear, currentHour, currentMinute, currentSecond,
nom, "STOP");
Serial.println(msg);
reconnect();
digitalWrite(D4, LOW);
ESP.deepSleep(0);
}
digitalWrite(D4, HIGH);
delay(10000);
}
void reconnect() { // ##### MQTT #####
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(nom)) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("SOLS", msg);
// ... and resubscribe
//client.subscribe("SOLS");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void lectureNTP() {
timeClient.update();
time_t epochTime = timeClient.getEpochTime();
//Get a time structure
struct tm *ptm = gmtime ((time_t *)&epochTime);
currentHour = timeClient.getHours();
currentMinute = timeClient.getMinutes();
currentSecond = timeClient.getSeconds();
currentDay = ptm->tm_mday;
currentMonth = ptm->tm_mon + 1;
currentYear = ptm->tm_year + 1900;
/*
H E U R E D ' É T É / H I V E R
D'après https://forums.futura-sciences.com/mathematiques-superieur/36243-passage-heure-dete-heure-hiver.html
*/
int jourEte;
int heureEte;
int jourHiver;
int heureHiver;
int maintenant;
int ecartHeure = 0;
if (currentYear % 4 == 0 )
// Le dernier dimanche de mars --- last sunday of march
jourEte = (31 - (5 * currentYear / 4 + 4) % 7);
heureEte = 30000 + (jourEte * 100) + 2 ; // mmjjhh
// Le dernier dimanche d'octobre --- last sunday of october
jourHiver = (31 - (5 * currentYear / 4 + 1) % 7);
heureHiver = 100000 + (jourHiver * 100) + 2;// mmjjhh
maintenant = currentMonth * 10000 + currentDay * 100 + currentHour;// mmjjhh
if (maintenant >= heureEte && maintenant < heureHiver) {
ecartHeure = 1; // DST europe = gmt 2 (summer time) + 1 hour
}
else
{
ecartHeure = 0;
}
// Ajustement heure -> jour -> mois
// L'heure d'été n'affecte pas février (bissextile) et s'arrête en octobre
currentHour += ecartHeure;
if (currentHour == 24) {
currentHour = 0;
currentDay += 1;
}
if (currentDay > nbreJoursMois[currentMonth - 1]) {
currentDay = 1;
currentMonth += 1;
}
}