Bonjour à tous,

Je suis nouveau sur ce forum, et je tiens à vous remerciez d'avance au cas ou.

J'ai un code Arduino pour un pluviomètre à bascule qui fonctionne correctement sur une carte UNO et le terminal de l'IDE, mais je voudrais le faire fonctionner sur une carte ESP8266 en wifi
sur une page html avec affichage les deux mesures relevées une pour le totale de la journée et l'autre pour le quart d'heure sur mon téléphone Android, mais je suis un peu perdu.

PS: je joint le code au cas ou.


Rostano91
*****************************

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
// Programme de pluviomètrie modifé et adapter le 11/06/2023
// On sépare l'intensité de la pluie en trois: 
// N°1 pluie faible (trace à 2 mm/h ), N°2 modérée (2 mm/h à 7,6 mm/h ) et N°3  forte (plus de 7,6 mm/h )
 
#include "RTClib.h"
#include <Wire.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <ESP8266WiFi.h>
 
#define RainPin 2                         // L'entrée Rain est connectée à la broche numérique 2 sur l'arduino ESP8266 et 2 sur l'arduino UNO
 
bool bucketPositionA = false;             // une des deux positions de benne basculante               
const double bucketAmount = 0.0025;       // mesure 2.25 mL (soit 0.0025 mm) pour chaque bascule du godet
double dailyRain = 0.0;                   // pluie accumulée pour la journée
double hourlyRain = 0.0;                  // pluie accumulée pendant une heure
double dailyRain_till_LastHour = 0.0;     // pluie accumulée pour la journée jusqu'à la dernière heure 
bool first;                               // car on veut lire les boucles (MHz) uniquement au 0ème instant 
 
RTC_Millis rtc;                           // temps RTC du logiciel
 
const char* ssid = "----------------";  // Mettez votre SSID
const char* password = "----------------------";  // Mettez votre mot de passe
 
float d = 0.0;
float h = 0.0;
 
AsyncWebServer server(80);
 
unsigned long previousMillis = 0;   
 
const long interval = 10000;  
 
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML>
<html>
<head>
  <title>BME280 Web Server</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
  <link rel="icon" href="data:,">
  <style>
    html {font-family: Arial; display: inline-block; text-align: center;}
    p {  font-size: 1.3rem;} 
    body {  margin: 0;}
    .topnav { overflow: hidden; background-color: #7576DB; color: white; font-size: 1.7rem; } //#4B1D3F
    .content { padding: 20px; }
    .card { background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); }
    .cards { max-width: 400px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } 
    .reading { font-size: 1.7rem; } 
    .card.PLUIES1 {color: #CC2EFA; }
    .card.PLUIES2 { color: #17bebb; }
    .card.infos { color: #7b0e7c; }  // mettre du texte 
  </style>
</head>
<body>
  <div class="topnav">
    <h3>Pluviometrie kiki</h3>
   </div>
  <div class="content">
    <div class="cards">
      <div class="card infos">
      <h4><i class="fa fa-shower" aria-hidden="true"></i> ( Pluie tombee sur 1 m/carre) </h4><p><span class="reading"><span id="pres"></span></span></p>
      </div>    
      <div class="card PLUIES1">
        <h4><i class="fa fa-shower" aria-hidden="true"></i> PLUIES TOTALES DE LA JOURNEE</h4><p><span class="reading"><span id="temp">%PLUIES TOTALES DE LA JOURNEE%</span> mm</span></p>
      </div>
      <div class="card PLUIES2">
        <h4><i class="fa fa-shower" aria-hidden="true"></i> PLUIES DU DERNIER QUART D'HEURE</h4><p><span class="reading"><span id="hum">%PLUIES DU DERNIER QUART D'HEURE%</span> mm</span></p>
      </div>
      </div>
  </div>
<script>
</html>)rawliteral";
 
String processor(const String& var){
  Serial.println(var);
  if(var == " dailyRain "){
    return String(dailyRain);
  }
  else if(var == " hourlyRain "){
    return String(hourlyRain);
  }
  return String();
}
 
void setup(){
 
  Serial.begin(115200);
  rtc.begin(DateTime(__DATE__, __TIME__));       // démarrer le RTC
  pinMode(RainPin, INPUT);                       // Définissez Rain Pin comme entrée.
  delay(2000);                                   // je suis lent à démarrer le moniteur série (pas nécessaire)
 
 
  WiFi.begin(ssid, password);
  Serial.println("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println(".");
  }
 
 
  Serial.println(WiFi.localIP());
 
 
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });
  server.on("/Pluies", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", String(d).c_str());
  });
  server.on("/Pluies", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", String(h).c_str());
 
  });
 
 
  server.begin();
}
 
void loop(){  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    float newD = double ();
    if (isnan(newD)) {
      Serial.println("Défaut godet!");
    }
    else {
      dailyRain = newD;
      Serial.println(dailyRain);
    }
     float newH = double ();
 
    if (isnan(newH)) {
      Serial.println("Défaut godet!");
    }
    else {
      hourlyRain = newH;
      Serial.println(hourlyRain);
       }
 
 
    DateTime now = rtc.now();
 
  // ++++++++++++++++++++++++ Count the bucket tips ++++++++++++++++++++++++++++++++
  if ((bucketPositionA==false)&&(digitalRead(RainPin)==LOW)){
    bucketPositionA=true;
    dailyRain+=bucketAmount;                               // mettre à jour la pluie quotidienne
  }
 
  if ((bucketPositionA==true)&&(digitalRead(RainPin)==HIGH)){
    bucketPositionA=false;  
  } 
  // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
  if(now.minute()%2 != 0) first = true;                   // 15 minutes d'intervalles pour affichage données
 
  if(now.minute()%2 == 0 && first == true){               //après la fin de la première minute, soyez prêt pour la prochaine lecture 15 minutes 
 
    hourlyRain = dailyRain - dailyRain_till_LastHour;      // calculer la pluie de la dernière heure
    dailyRain_till_LastHour = dailyRain;                   // mettre à jour la pluie jusqu'à la dernière heure pour le prochain calcul
 
    // affichage heures et relevés
    Serial.println("Heure Actuel");                       // titre 
    Serial.print(now.hour());
    Serial.print(":");                                    
    Serial.print(now.minute());
    Serial.println("      >  Pluie Totale pour la journée = ");
    Serial.print(dailyRain , 4);                            // le '3' assure la précision requise de 3 chiffres après la virgule
    Serial.println(" mm ");
    Serial.println();
    Serial.print("           >  Pluies du dernier quart d'heure = ");
    Serial.println(hourlyRain , 4);                           // le '3' assure la précision requise de 3 chiffres après la virgule
    Serial.println(" mm ");
    Serial.println();
    Serial.println();
 
    first = false;                                        // exécuter les calculs une seule fois par heure
  }
 
  if(now.hour()== 0) {
    dailyRain = 0.0;                                      // pluie quotidienne claire à minuit
    dailyRain_till_LastHour = 0.0;                        // nous ne voulons pas de pluie négative à 01h00
 
    }
   }
  }