Bonjour, je suis débutant et je cherche à faire communiquer deux Arduino nano esp32 entre elle. La première celle dehors qui mesure la température et l'humidité avec le module DHT11 et la deuxième carte à l'intérieure qui affiche la température et l'humidité sur un écran oled I2C. Problème ? je ne sais pas coder un code qui fait communiquer deux Arduino entre elles
Merci et bonne journée
Les 2 cartes voient-elles le wifi domestique ?
Ce forum est un centre d'aide, ce sera avec un grand plaisir que l'on t'aidera, mais il ne faut pas se tromper d'adresse, nous ne sommes pas un centre de formation à partir de 0.
Il y a d'autres solutions pour cela.
Il faut que tu fasses toi-même un minimum d'effort préalable de formation.
Non en fait, tu n'es pas obligé de faire cet effort, tu pourras trouver, même ici, des personnes qui t'écriront un programme que tu n'auras qu'à télécharger.
Mais où sera le plaisir ?
Il faut savoir que le langage utilisé pour programmer ces microcontrôleurs est du C ou du C++.
Ce qui est improprement appelé "langage arduino" n'est en réalité que des fonctions, ou des classes, écrites en C ou en C++. Ces fonctions sont adaptées au pilotage des produits particuliers que sont les microcontrôleurs. La base des programmes est du C/C++.
Il existe de très nombreux tutos de C/C++ pour débutants.
Un tuto très simple, raz les pâquerettes, aidera énormément.
Par exemple ici : Les meilleurs cours et tutoriels pour apprendre le langage C, mais ce n'est qu'un exemple, d'autres que moi en citeront d'autres.
Tu auras la base solide pour aller plus loin.
Il existe d'autres tutos qui se réfèrent plus à la gestion des microcontrôleurs avec les fonctions arduino : eskimon.fr.
Eskimon explique aussi bien le langage que le matériel. C'est un très bon compromis.
Concernant les ESP32 et le Wifi il existe un excellent site : https://randomnerdtutorials.com/
Pour la communication entre 2 ESP32 il y a le protocole ESPnow : espnow | Random Nerd Tutorials
Juste un point de détail : si tu n'as pas acheté un DHT11, prend plutôt un DHT22, il est plus précis.
Conseil : il existe des bibliothèques pour gérer les composants, il faut les utiliser.
Il faut surtout commencer par faire les exemples livrés avec les bibliothèques pour être assuré que l'on fait bien comme il faut.
Il ne faut pas vouloir faire d'emblée un programme de 300 lignes, on commence par faire des petits tests unitaires et ensuite on assemble.
En résumé, ici, tu auras plus facilement de l'aide si tu montres que tu as fait un effort, un travail personnel, même si cela ne fonctionne pas.
Si cela ne fonctionne pas, il y aura toujours quelqu'un pour t'expliquer pourquoi.
Bonjour yannmichaud
Si une liaison directe (sans passer par ton réseau interne Wifi) entre les 2 Nano convient, regardes du côté d'ESP-NOW
Cordialement
jpbbricole
J’ai deja testé avec un code tout fait mais cela ne marcher pas
Bonjour,
Je ne connais pas encore se système. Je vais me renseigner. Merci beaucoup
Cordialement Michaud yann
Qu’est-ce qui ne marchait pas ? La réception WiFI à l’extérieur ?
Je ne sais pas. L'écran était tout noir et afficher rien
Bonjour yannmichaud
Quel est le modèle de ton écran, ou un lien où tu l'as acheté?
Et à l’intérieur ça fonctionnait ?
Quel était le code ?
Avez vous essayé autre chose ?
…
(Si vous voulez de l’aide il va falloir être un peu plus impliqué et fournir des réponses infos précises …)
Bonjour yannmichaud
Est tu bien câblé sur ces broches:

Pour contrôler si ton Nano ESP32 "voit" ton écran, charges ce programme:
#include <Wire.h>
void setup()
{
Serial.begin(115200);
Wire.begin(A4, A5); // Pour Nano ESP32
Serial.println("Scan I2C...");
}
void loop()
{
byte error, address;
for (address = 1; address < 127; address++)
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("Trouvé à 0x");
Serial.println(address, HEX);
}
}
delay(3000);
}
et du devrait voir dans ton terminal à 115200, quelque chose comme ceci:
Trouvé à 0x3C
Trouvé à 0x3C
Trouvé à 0x3C
Ce n'est pas forcément l'adresse exacte, mais ça indiquerai que ton bus i2C fonctionne.
A+
Cordialement
jpbbricole
Bonjour, Mon écran est un écran oled 128x64 i2c acheté sur Az-délivery
Re bonjour,
comme je ne savais rien j'ai demandé à mistral de m'expliquer comment en faire un. l'ia ma ensuite donné un code
#include <WiFi.h>
#include <WebServer.h>
#include <DHT.h>
#define DHTPIN 13
#define DHTTYPE DHT11
const char* ssid = "StationMeteo";
const char* password = "12345678";
DHT dht(DHTPIN, DHTTYPE);
WebServer server(80);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.softAP(ssid, password);
server.on("/data", []() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
String data = String(temp) + "," + String(hum);
server.send(200, "text/plain", data);
});
server.begin();
}
void loop() {
server.handleClient();
}
pour le serveur (dehors )
#include <WiFi.h>
#include <HTTPClient.h>
#include <U8g2lib.h>
const char* ssid = "StationMeteo";
const char* password = "12345678";
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
void setup() {
Serial.begin(115200);
u8g2.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://192.168.4.1/data");
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
int commaIndex = payload.indexOf(',');
float temp = payload.substring(0, commaIndex).toFloat();
float hum = payload.substring(commaIndex + 1).toFloat();
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.setCursor(0, 20);
u8g2.print("Temp: ");
u8g2.print(temp);
u8g2.print(" C");
u8g2.setCursor(0, 50);
u8g2.print("Hum: ");
u8g2.print(hum);
u8g2.print(" %");
u8g2.sendBuffer();
}
http.end();
}
delay(5000);
}
et voici le client (intérieur)
Avant de faire les codes client server, il faut faire des petits code de test …
AH ok
L’objectif c’est de comprendre si votre carte fonctionne, si vous gérez l’écran correctement, si vous recevez le wifi de la maison etc
Une fois que tout est sous contrôle vous pourrez passer à votre projet
ok mais jpbbricole m'a donné un autre système. L'esp now. c'est un bonne idée ?
Oui mais, en fait, quelque soit le système utilisé il faudra quand même comprendre comment on le met en œuvre et il y aura donc une phase d'apprentissage.
Et dans tous les cas, il faut intégrer les sous-ensembles un par un.
- on connecte l'écran on lance un programme basique (il y a ce qu'il faut dans les exemples installés avec les bibliothèques) pour voir si l'écran fonctionne.
- on teste la connexion Wifi
- on test la mise en œuvre des capteurs
Et quand tout ces sous-ensembles sont fonctionnels on peut intégrer l'application finale. Si tu fais tout en même temps il est difficile de voir où ça bloque.
Bonjour yannmichaud
L'avantage d'ESP-NOW est que ton réseau WIFI n'est pas nécessaire vu que les 2 ESP32 constituent leur propre réseau.
Si tu veux un exemple opérationnel, c'est volontiers.
As tu testé la connectivité de ton bus i2C avec le programme du post#11?
A+
Cordialement
jpbbricole