Go Down

Topic: Arduino Mega + ESP8266  (Read 159 times) previous topic - next topic

sanstouf

Bonjour,

J'ai créé avec un arduino mega une sonde pour connaitre l'état de ma cuve (j'avais ouvert un topic pour améliorer mon code merci pour les réponses :) )

Je souhaite maintenant faire évoluer mon projet avec du wifi et l'ESP8266

J'ai fait une maquette avec uniquement un arduino mega et l'esp8266, je réussi bien à mettre à jour mon capteur dans domoticz !

Mais... , car oui il a un mais lol

Pour compiler mon arduino mega et mon esp8266, je sélectionne pour compiler la board esp8266, et du coup mon code ne connait pas les entrées analogiques de l'arduino mega... voici mon code:

Code: [Select]

/*
  This is a demo of ESP8266 WiFi Module in standalone mode (without Arduino) controlling an LED via a Web page.
  This code also demostrates that PWM is available on the ESP8266, so we can dim the LED.
  Analog Input is available on the ESP8266 but this pin is not wired up on ESP-01 board.
  The ESP can also support interrupts.

  This demo uses the Arduino IDE and the Arduino Boards Manager to upload the program to the ESP2866 with an FTDI Programmer.
  N.B. This overwrites any Firmware that was previously on the ESP8266.

  See: http://www.instructables.com/id/ESP8266-WiFi-Module-for-Dummies/ for the details on how to set the board up and upload the code to the ESP8266
  Also see: http://www.instructables.com/id/The-Simple-Guide-to-Flashing-Your-ESP8266-Firmware/
*/

// Include the ESP8266 Library. This library is automatically provided by the ESP8266 Board Manager and does not need to be installed manually.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
String codeVersion = "Version 1.0  Aug 2016 by TonesB";
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


// WiFi Router Login - change these to your router settings
const char* SSID = "magdam";
const char* password = "1988198219881982";
//configuration domoticz
const char* host = "192.168.1.34";
const int   port = 8080;

const int NBPINSANA = 16; // Nombre de pins analogiques scannées
const byte seuil = 200; // Mettre ici la valeur du seuil de détection
//const int Level3Pin = A1;  // Pin pour connaitre la valeur pour regler au mieux le seuil
const int Commun = 6;  // Pin du 5V pour eviter l'oxydation
// Setup GPIO2
int pinGPIO2 = 2; //To control LED
int ledStatus = 0; //0=off,1=on,2=dimmed

// Create the ESP Web Server on port 80
WiFiServer WebServer(443);
HTTPClient http;
void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  Serial.println(codeVersion);
  pinMode(Commun,OUTPUT);

  // Setup the GPIO2 LED Pin - this demo also uses PWM to dim the LED.
 // pinMode(pinGPIO2, OUTPUT);
 // digitalWrite(pinGPIO2, LOW);
  // ledStatus = 0;

  // Connect to WiFi network
  Serial.println();
  WiFi.disconnect();
  WiFi.mode(WIFI_STA);
  Serial.print("Connecting to ");
  Serial.println(SSID);
  WiFi.begin(SSID, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");

  // Start the Web Server
  WebServer.begin();
  Serial.println("Web Server started");

  // Print the IP address
  Serial.print("You can connect to the ESP8266 at this URL: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

void loop() {
  digitalWrite(Commun, HIGH);
  lcd.clear();
  lcd.begin(16,2); // set up the LCD's number of columns and rows:
  lcd.print("La cuve est a:"); // Print a message to the LCD.
  byte sum = 0;
  int ADC_Val=0;
  for (byte i = 0; i < NBPINSANA; i++) sum  += (analogRead(i) < seuil ? 0 : 1);
  float level = sum * 100.0 / NBPINSANA;
  ADC_Val=analogRead(Level3Pin);
  Serial.print(ADC_Val); Serial.print("\n");
  Serial.print ("Niveau = ");
  //Serial.print (Level3Pin);
  Serial.print(level, 2);
  Serial.println("%");
  lcd.setCursor(6, 1);
  lcd.print(level);
  lcd.setCursor(12, 1);
  lcd.print ("%");
  digitalWrite(Commun, LOW);

  String url = "/json.htm?type=command&param=udevice&idx=19679&nvalue=0&svalue=";
        url += string(level);
        //url += String(hum_stat); url += ";";
        //url += String(pa);url += ";";
        //url += String(bar_for);
     
        sendDomoticz(url);
}
 void sendDomoticz(String url){
  Serial.print("connecting to ");
  Serial.println(host);
  Serial.println(port);
  Serial.print("Requesting URL: ");
  Serial.println(url);
  http.begin(host,port,url);
  int httpCode = http.GET();
    if (httpCode) {
      if (httpCode == 200) {
        String payload = http.getString();
        Serial.println("Domoticz response ");
        Serial.println(payload);
      }
    }
  Serial.println("closing connection");
  http.end();
  delay(10000);
}
[code/]

Comment je peux faire pour cumuler les deux codes svp ?

Je pense qu'il faut que je sélectionne la carte arduino mega et que je rajoute des bibliothèques mais je seche la:(

Merci pour votre aide

lesept

C'est normal, il fait que tu branches ton capteur sur l'ESP8266. Attention, son ADC ne supporte que des tensions jusqu'à 1 volt. Il faudra faire un point diviseur pour ramener la tension mesurée dans cette gamme de valeurs.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

al1fch

#2
Aug 01, 2020, 11:25 am Last Edit: Aug 01, 2020, 11:25 am by al1fch

Code: [Select]
const int NBPINSANA = 16; // Nombre de pins analogiques scannées


de plus l'ESP8266 ne possède qu'une seule entrée analogique....

sanstouf

Oui ça je comprends bien, mais je ne peux pas utiliser la carte méga avec l'ESP8266 en complément ?

en gros je compile sur la carte arduino mega et via le code j'utilise la carte EEP8266..

al1fch

#4
Aug 01, 2020, 02:07 pm Last Edit: Aug 01, 2020, 02:10 pm by al1fch
Quote
mais je ne peux pas utiliser la carte méga avec l'ESP8266 en complément ?
Si , c'est possible avec, par exemple,  un ESP8266 avec un firmware AT et sur la Mega un code gérant le'ESP826 au moyen de commandes AT.

Perso , j'ai complètement abandonné ce type de combinaison trop limitée à mon goût et ne peux guère aider

par contre un bon tutoriel  sur ce forum  explique comment faire :
https://forum.arduino.cc/index.php?topic=501923.0

S'en inspirer et voire comment se raccorder ainsi à domoticz

lesept

C'est vrai que je ne vois pas l'intérêt, sauf si tu as besoin de beaucoup d' IO. L'esp8266 dispose de plus de mémoire et est plus rapide que le Mega et il  a le WiFi. Il est plus simple de l'utiliser seul, si on peut en gardant à l'esprit ses limites telles qu'indiquées plus haut
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

sanstouf

En fait, j'ai besoin d'avoir le plus d'entrées Analogiques possible, avec le Mega il y a 16. Je plonge une sonde avec 16 vis raccordées aux Analogiques, le +5v au plus bas, plus le niveau est haut plus les entrées Analogiques remontent etc..

al1fch

#7
Aug 02, 2020, 11:48 am Last Edit: Aug 02, 2020, 11:50 am by al1fch
Bonjour

Dans ce cas un circuit intégré CD4067 pourrait permettre de balayer 16 sondes analogiques avec l'unique entrée analogique d'un ESP8266 la sélection de l'une des 16 entrées se faisant par 4 sorties numériques.

exemple d'utilisation : https://www.carnetdumaker.net/articles/utiliser-un-multiplexeur-analogique-cd4067b-avec-une-carte-arduino-genuino/

Go Up