Community Forum
    • Blog
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Remora V1.3 NodeMCU Nouvelle Version Logicielle + API Locale

    Scheduled Pinned Locked Moved Remora
    remoralocaleapinodemcuesp8266
    119 Posts 17 Posters 112.6k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • F Offline
      francky50 @seb
      last edited by

      @seb
      salut, j'ai aussi galéré au début depuis mon mac et j'ai trouvé ce driver CP210x Macintosh OS X VCP Driver v4 et téléchargé le fichier SiLabsUSBDriverDisk.dmg que j'ai installé et depuis çà fonctionne bien, l'adruino 1.6.5 voit bien mon port série et mon nodeMCU. Je suis aussi en OSX 10.11.2.
      J'ai eu aussi un problème avec un cable USB qui ne fonctionnait pas (il devait juste servir pour recharger un téléphone) mais j'ai pris celui d'un téléphone Samsung S4 mini et avec lui çà fonctionne bien.

      1 Reply Last reply Reply Quote
      • CharlesC Offline
        Charles
        last edited by

        @Seb,
        tu as peut être un pb avec ton NodeMCU, ça arrive, si tu veux tu peux me le renvoyer, je peux essayer d'y regarder ?

        1 Reply Last reply Reply Quote
        • S Offline
          seb
          last edited by

          ok on fait ça car meme avec l'idée de manu12 pas moyen
          Tu me confirmes ton adresse
          Merci BEAUCOUP
          Seb

          1 Reply Last reply Reply Quote
          • Dany21000D Offline
            Dany21000
            last edited by

            Il y a une évolution que j'essaye d'apporter à remora.
            Je souhaite que la remora se reconnecte automatiquement quand le reseau wifi n'est pas disponible, reboot du point d'accès, demarrage du remora avant le point d'accès, etc ...

            Dans la boucle de loop, je rajoute ceci qui fonctionne :

            	// Si perte de la connection au reseau wifi, redemarrage automatique
            	if (WiFi.status() != WL_CONNECTED) {
            		Serial.println("Perte de la connection au reseau Wifi");
            		Serial.println("Redemarrage automatique");
            		ESP.wdtDisable();
            		ESP.restart();
                  }
            

            Parce que je voulais aussi essayer de ne pas rebooter la remora mais mon code ici ne fonctionne pas ... :

            	IPAddress ip(192,168,50,251);
                IPAddress gateway(192,168,50,254);
                IPAddress subnet(255,255,255,0);
                WiFi.config(ip, gateway, subnet);	
            	WiFi.begin(DEFAULT_WIFI_SSID, DEFAULT_WIFI_PASS);
            	Serial.print("Reconnexion au reseau Wifi en cours");
            	while (WiFi.status() != WL_CONNECTED) {		// Attente de la connexion au reseau Wifi, redemarrage automatique
            		delay(500);
            		Serial.print(".");			
            	}
            

            Note, je test en redémarrant le point d'accès logicielement.

            1 Reply Last reply Reply Quote
            • CharlesC Offline
              Charles
              last edited by Charles

              @Dany21000
              C'est curieux, j'ai 5 NodeMCU sur un autre projet et je ne rencontre pas ce soucis, les reconnexion aux WiFi se font toutes seules, je vais copier/coller le code dans Remora et WifInfo prochainement mais voici le code que j'apelle une seule fois dans le setup()
              Ah oui, pour info Arduino-ESP8266 version git (toujours) plus IDE 1.6.7

              /* ======================================================================
              Function: WifiHandleConn
              Purpose : Handle Wifi connection / reconnection and OTA updates
              Input   : setup true if we're called 1st Time from setup
              Output  : state of the wifi status
              Comments: -
              ====================================================================== */
              int WifiHandleConn(boolean setup = false) 
              {
                int ret = WiFi.status();
              
                if (setup) {
                  WiFi.mode(WIFI_AP_STA);
              
                  DebuglnF("========== SDK Saved parameters Start"); 
                  WiFi.printDiag(DEBUG_SERIAL);
                  DebuglnF("========== SDK Saved parameters End"); 
                  Debugflush();
              
                  // no correct SSID
                  if (!*config.ssid) {
                    DebugF("no Wifi SSID in config, set to AP Only!"); 
                    WiFi.mode(WIFI_AP);
              
                  } else {
                    DebugF("Connecting to: "); 
                    Debug(config.ssid);
                    Debugflush();
              
                    // Do wa have a PSK ?
                    if (*config.psk) {
                      // protected network
                      Debug(F(" with key '"));
                      Debug(config.psk);
                      Debug(F("'..."));
                      Debugflush();
                      WiFi.begin(config.ssid, config.psk);
                    } else {
                      // Open network
                      Debug(F("unsecure AP"));
                      Debugflush();
                      WiFi.begin(config.ssid);
                    }
              
                    uint8_t timeout = 50; // 50 * 200 ms = 10 sec time out
                    while ( ((ret = WiFi.status()) != WL_CONNECTED) && timeout )
                    {
                      // Orange LED
                      LedRGBON(COLOR_ORANGE);
                      delay(50);
                      LedRGBOFF();
                      delay(150);
                      --timeout;
                    }
                  }
              
                  // connected ? default to disable AP, client mode only
                  if (ret == WL_CONNECTED)
                  {
                    DebuglnF("connected!");
                    DebugF("IP address   : "); Debugln(WiFi.localIP());
                    DebugF("MAC address  : "); Debugln(WiFi.macAddress());
              
                  // not connected ? start AP
                  } else {
                    DebuglnF("Wifi client unable to connect!");
                  }
              
                  // connected and not AP defined in config, remove AP
                  if ( ret == WL_CONNECTED && !(config.config & CFG_AP) ) {
                    WiFi.mode(WIFI_STA);
                  } else {
                    // Need Access point configuration 
                    // SSID = hostname
                    DebugF("Starting AP  : ");
                    Debug(config.ap_ssid);
                    Debugflush();
              
                    // protected network
                    if (*config.ap_psk) {
                      DebugF(" with key '");
                      Debug(config.ap_psk);
                      DebugF("'");
                      WiFi.softAP(config.ap_ssid, config.ap_psk);
                    // Open network
                    } else {
                      DebugF(" with no password");
                      WiFi.softAP(config.ap_ssid);
                    }
              
                    DebugF("\r\nIP address   : "); Debugln(WiFi.softAPIP());
                    DebugF("MAC address  : "); Debugln(WiFi.softAPmacAddress());
                  } 
              
                  // Set OTA parameters
                  ArduinoOTA.setPort(config.ota_port);
                  ArduinoOTA.setHostname(config.host);
                  ArduinoOTA.setPassword(config.ota_auth);
                  ArduinoOTA.begin();
              
              
                  WiFiMode_t con_type = WiFi.getMode();
              
                  // just in case your sketch sucks, keep update OTA Available
                  // Trust me, when coding and testing it happens, this could save
                  // the need to connect FTDI to reflash
                  // Usefull just after 1st connexion when called from setup() before
                  // launching potentially buggy main()
                  for (uint8_t i=0; i<= 10; i++) {
                    if (con_type == WIFI_STA) {
                      LedRGBON(COLOR_GREEN);
                    } else if (con_type == WIFI_AP_STA) {
                      LedRGBON(COLOR_CYAN);
                    } else if (con_type == WIFI_AP) {
                      LedRGBON(COLOR_PURPLE);
                    } else {
                      LedRGBON(COLOR_RED);
                    }
              
                    delay(100);
                    LedRGBOFF();
                    delay(200);
                    ArduinoOTA.handle();
                  }
              
                  // Wifi is activated
                  wifi_state = true;
              
                } // if setup
              
                return WiFi.status();
              }
              
              
              1 Reply Last reply Reply Quote
              • Dany21000D Offline
                Dany21000
                last edited by Dany21000

                Merci Charles de ta réponse.
                Je dispose de 3 autres nodemcu (pas de lua mais du c) que j'exploite comme sondes à base de DHT22. Pour le moment, ce projet de sonde est en standby car j'attends les DHT22.

                C'est en travaillant sur ce projet, qui sera partagé, que j'ai été confronté à ce problème de non-reconnexion au réseau wifi.
                Je me suis basé sur un mix de code du remora et d'un exemple de lecture du DHT22 pour réaliser mon système.

                Et du coup, au départ, je pensais que c'était mon code des sondes qui n'était pas bon.
                Alors j'ai flashé mes 3 nodemcu avec le code remora 1.3.1.
                Chacun avec une IP Fixe.
                Le PC en client DHCP est connecté en filaire sur un commutateur lui même relié au routeur, qui fait aussi point d'accès wifi.

                Tests effectués :
                1 - lancer un ping sur les 3 nodemcu
                2 - renommer le nom du réseau Wifi...
                3 - les nodemcu ne pingent plus, tout va bien.
                4 - apres quelques minutes, des réseaux Wifi Remora220, 221 et 222 (hostname = 4eme octet de l'IP fixe) apparaissent
                5 - 5 minutes apres, je remet le nom initial du réseau Wifi
                6 - ... rien ne se passe, les remora restent en mode AP autonome
                7 - inutile, mais je redémarra le routeur/ap wifi ... idem, rien ne se passe
                8 - redemarrage d'une des remora (la 220) ... et elle se reconnecte bien et reping bien
                9 - je redemarre le routeur, et pendant qu'il redémarrage, un nouveau réseau Wifi apparait Remora220
                10 - malgrès quelques minutes après le routeur du réseau Wifi du routeur ... retour au point N°6

                Donc j'en au conclus qu'une fois basculé en mode softAP... ils y restent.
                D'ailleurs pendant ces tests, ma vraie remora elle est aussi revenue en mode softAP et j'ai été contraint de la redémarrer manuellement aussi.

                Voici pourquoi j'ai effectué les modifications que je vous présente ci-dessous :
                **
                Fonction WifiHandleConn : **

                int WifiHandleConn(boolean setup = false) 
                {
                  int ret = WiFi.status();
                  uint8_t timeout ;
                
                  if (setup) {
                
                    Serial.print(F("========== SDK Saved parameters Start")); 
                    WiFi.printDiag(Serial);
                    Serial.println(F("========== SDK Saved parameters End")); 
                	
                
                	///////////////////////// AJOUT DANY
                	IPAddress ip(192,168,50,251);
                	IPAddress gateway(192,168,50,254);
                	IPAddress subnet(255,255,255,0);
                	WiFi.config(ip, gateway, subnet);  	
                	///////////////////////// AJOUT DANY
                	
                
                    #if defined (DEFAULT_WIFI_SSID) && defined (DEFAULT_WIFI_PASS)
                      Serial.print(F("Connection au Wifi : ")); 
                      Serial.print(DEFAULT_WIFI_SSID); 
                      Serial.print(F(" avec la clé '"));
                      Serial.print(DEFAULT_WIFI_PASS);
                      Serial.print(F("'..."));
                      Serial.flush();
                      WiFi.begin(DEFAULT_WIFI_SSID, DEFAULT_WIFI_PASS);
                    #else
                      Serial.print(F("Connection Wifi avec les parametres sauvegardes ")); 
                    #endif
                
                    timeout = 25; // 25 * 200 ms = 5 sec time out
                
                    // 200 ms loop
                    while ( ((ret = WiFi.status()) != WL_CONNECTED) && timeout )
                    {
                      // Orange LED
                      LedRGBON(COLOR_ORANGE);
                      delay(50);
                      LedRGBOFF();
                      delay(150);
                      --timeout;
                    }
                
                    // connected ? disable AP, client mode only
                    if (ret == WL_CONNECTED)
                    {
                      Serial.println(F("connecte!"));
                      WiFi.mode(WIFI_STA);
                
                      Serial.print(F("IP address   : ")); Serial.println(WiFi.localIP());
                      Serial.print(F("MAC address  : ")); Serial.println(WiFi.macAddress());
                    
                    // not connected ? start AP
                    } else {
                
                
                
                	 ///////////////////////// AJOUT DANY	
                      Serial.println("");
                	  Serial.println("Connexion Wifi impossible, Redemarrage automatque");
                	  ESP.wdtDisable();
                	  ESP.restart();
                	///////////////////////// AJOUT DANY
                	 
                	///////////////////////// SUPPRESSION DANY	  
                	/*
                      char ap_ssid[32];
                      Serial.print(F("Erreur, passage en point d'acces "));
                      Serial.println(DEFAULT_HOSTNAME);
                
                      // protected network
                      Serial.print(F(" avec la clé '"));
                      Serial.print(DEFAULT_WIFI_AP_PASS);
                      Serial.println("'");
                      Serial.flush();
                      WiFi.softAP(DEFAULT_HOSTNAME, DEFAULT_WIFI_AP_PASS);
                      WiFi.mode(WIFI_AP_STA);
                
                      Serial.print(F("IP address   : ")); Serial.println(WiFi.softAPIP());
                      Serial.print(F("MAC address  : ")); Serial.println(WiFi.softAPmacAddress());
                	*/
                	///////////////////////// SUPPRESSION DANY
                
                
                
                    }
                
                    // Set OTA parameters
                    ArduinoOTA.setPort(DEFAULT_OTA_PORT);
                    ArduinoOTA.setHostname(DEFAULT_HOSTNAME);
                    ArduinoOTA.setPassword(DEFAULT_OTA_PASS);
                    ArduinoOTA.begin();
                
                    // just in case your sketch sucks, keep update OTA Available
                    // Trust me, when coding and testing it happens, this could save
                    // the need to connect FTDI to reflash
                    // Usefull just after 1st connexion when called from setup() before
                    // launching potentially buggy main()
                    for (uint8_t i=0; i<= 10; i++) {
                      LedRGBON(COLOR_MAGENTA);
                      delay(100);
                      LedRGBOFF();
                      delay(200);
                      ArduinoOTA.handle();
                    }
                
                  } // if setup
                
                  return WiFi.status();
                }
                

                Fonction loop

                /* ======================================================================
                Function: loop
                Purpose : boucle principale du programme
                Input   : -
                Output  : -
                Comments: -
                ====================================================================== */
                void loop()
                {
                  static bool refreshDisplay = false;
                  static bool lastcloudstate;
                  static unsigned long previousMillis = 0;  // last time update
                  unsigned long currentMillis = millis();
                  bool currentcloudstate ;
                
                  // our own setup
                  if (first_setup) {
                    mysetup();
                    first_setup = false;
                  }
                
                  // Gérer notre compteur de secondes
                  if ( millis()-previousMillis > 1000) {
                    // Ceci arrive toute les secondes écoulées
                    previousMillis = currentMillis;
                    uptime++;
                    refreshDisplay = true ;
                  }
                
                  #ifdef MOD_TELEINFO
                    // Vérification de la reception d'une 1ere trame téléinfo
                    tinfo_loop();
                    _yield();
                  #endif
                
                  #ifdef MOD_RF69
                    // Vérification de la reception d'une trame RF
                    if (status & STATUS_RFM)
                      rfm_loop();
                      _yield();
                  #endif
                
                  #ifdef MOD_OLED
                    // pour le moment on se contente d'afficher la téléinfo
                    screen_state = screen_teleinfo;
                
                    // Modification d'affichage et afficheur présent ?
                    if (refreshDisplay && (status & STATUS_OLED))
                      display_loop();
                      _yield();
                  #endif
                
                  // çà c'est fait
                  refreshDisplay = false;
                
                  #if defined (SPARK)
                  // recupération de l'état de connexion au cloud SPARK
                  currentcloudstate = Spark.connected();
                  #elif defined (ESP8266)
                  // recupération de l'état de connexion au Wifi
                  currentcloudstate = WiFi.status()==WL_CONNECTED ? true:false;
                  #endif
                
                  // La connexion cloud vient de chager d'état ?
                  if (lastcloudstate != currentcloudstate)
                  {
                    // Mise à jour de l'état
                    lastcloudstate=currentcloudstate;
                
                    // on vient de se reconnecter ?
                    if (currentcloudstate)
                    {
                      // on pubie à nouveau nos affaires
                      // Plus necessaire
                      #ifdef SPARK
                      // spark_expose_cloud();
                      #endif
                
                      // led verte
                      LedRGBON(COLOR_GREEN);
                    }
                    else
                    {
                      // on compte la deconnexion led rouge
                      my_cloud_disconnect++;
                      Serial.print("Perte de conexion au cloud #");
                      Serial.println(my_cloud_disconnect);
                      LedRGBON(COLOR_RED);
                	  
                
                
                	  ///////////////////////// AJOUT DANY
                	  Serial.println("");
                	  Serial.println("Redemarrage automatque");
                	  ESP.wdtDisable();
                	  ESP.restart();
                	  ///////////////////////// AJOUT DANY
                
                
                    }
                  }
                
                  //#ifdef SPARK
                  //char buff[64];
                  //int len = 64;
                
                  // process incoming connections one at a time forever
                  //server.processConnection(buff, &len);
                  //#endif
                
                
                  // Connection au Wifi ou Vérification
                  #ifdef ESP8266
                    // Webserver 
                    server.handleClient();
                    ArduinoOTA.handle();
                
                    if (task_emoncms) { 
                      emoncmsPost(); 
                      task_emoncms=false; 
                    } else if (task_jeedom) { 
                      jeedomPost();  
                      task_jeedom=false;
                    }
                  #endif
                
                }
                

                J'utilise l'Arduino IDE 1.6.7, je vais essayer et étudier ta nouvelle version du WifiHandleConn ce soir.

                1 Reply Last reply Reply Quote
                • CharlesC Offline
                  Charles
                  last edited by

                  @Dany21000
                  Merci pour le partage 🙂

                  Ah oui je ne sais plus trop, peut être le remora bascule en softAP si il perd le Wifi je me souviens plus ce que j'ai fait (en plus mixé avec le code particle, ça devient plus trop lisible)

                  Question bête pourquoi le choix des DHT22 ?J'ai le même projet que toi en fait, mais pour de l'indus, j'ai pris des SI7021 qui sont plus petits, plus précis avec un temps de mesure plus rapide, mais surtout I2C et donc pas de blocage à cause de timing précis ;). Mais moins pratique à souder, quoi que regarde ici

                  J"ai ajouté le clignotement de la onboard LED aussi dans le loop ça me permet de voir direct si le nodeMCU est connecté au Wifi ou en AP/Deconnecté, super pratique et aussi de detecter l'appui sur le bouton "flash" pour faire des actions par exemple

                  dans le loop

                  // manage Blinking LED
                    // Wifi disabled 
                    if (!wifi_state) {
                      key = handle_key_led(LOW);
                    } else {
                      if (WiFi.status()==WL_CONNECTED) {
                        // Connected (Client mode OK)
                        key = handle_key_led(((millis() % 1000) < 200) ? HIGH:LOW);
                      } else {
                        // AP Mode only or client failed
                        key = handle_key_led(((millis() % 333) < 111) ? HIGH:LOW);
                      }
                    }
                  
                    if (key) {
                      DebuglnF("Key pressed");
                    }
                  

                  et la fonction handle_key_led

                  /* ======================================================================
                  Function: handle_key_led 
                  Purpose : Manage on board Led and Push button of NodeMCU
                  Input   : 1 to light on the led, 0 to light off
                  Output  : 1 if button is pressed
                  Comments: on NodeMCU BUILTIN_LED is GPIO16
                  ====================================================================== */
                  uint8_t handle_key_led( uint8_t level)
                  {
                    uint8_t temp;
                    digitalWrite(16, 1);
                    pinMode(16, OUTPUT);
                    digitalWrite(16, !level);
                  
                    // Flash is on GPIO0, so RGB LED
                    pinMode(0, INPUT);
                    temp = digitalRead(0);
                    pinMode(0, OUTPUT); // set back to output
                    return !temp;
                  }
                  
                  

                  Ce sera intégré dans les prochaines version Remora et WifInfo

                  1 Reply Last reply Reply Quote
                  • Dany21000D Offline
                    Dany21000
                    last edited by

                    Je n'ai pas encore eux le temps d'apprivoiser ces modifications.

                    En tout cas, je viens de connecter la téléinfo sur la remora... enfin depuis 2 jours elle y est.
                    Aie, elle me fait du délestage en plus de jeedom...
                    Demain je lui retire sa teleinfo tant que je n'ai pas ajouté un petit booleen quelque part pour autoriser ou non le delestage par la remora.

                    Je vais certainement ouvrir un nouveau sujet dès que j'ai un peu de temps et tu aura la réponse du pourquoi du DHT22.

                    1 Reply Last reply Reply Quote
                    • S Offline
                      seb
                      last edited by

                      Bonjour à tous,

                      Merci Charles pour le module
                      Soudures faites , tout fonctionne imper

                      Je voulais vous remercier de votre efficacité et gentillesse, tout court

                      A bientôt
                      Seb

                      1 Reply Last reply Reply Quote
                      • CharlesC Offline
                        Charles
                        last edited by

                        @Seb,
                        Merci pour ton retour, à très vite.

                        1 Reply Last reply Reply Quote
                        • First post
                          Last post

                        7

                        Online

                        5.7k

                        Users

                        534

                        Topics

                        5.0k

                        Posts

                        Top Topics

                        • Denky 4 - Domoticz - Triphasé -
                          Nicolas BernaertsN
                          Nicolas Bernaerts
                          0
                          7
                          241

                        • Denky D4 et Linky Standard TInfo Rx Non Configuré
                          CharlesC
                          Charles
                          0
                          5
                          280

                        • CC1101
                          CharlesC
                          Charles
                          0
                          2
                          116

                        Popular Tags

                        teleinfo
                        24 topics
                        arduino
                        19 topics
                        remora
                        16 topics
                        esp8266
                        10 topics
                        arduipi
                        10 topics
                        wifinfo
                        7 topics
                        raspberry
                        7 topics
                        broadcast
                        7 topics
                        Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB