Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. [Solved] MySensors WiFi Gateway with NODE-MCU ESP8266 and Capacitive Soil Moisture Sensor : first steps, first errors

[Solved] MySensors WiFi Gateway with NODE-MCU ESP8266 and Capacitive Soil Moisture Sensor : first steps, first errors

Scheduled Pinned Locked Moved Troubleshooting
5 Posts 2 Posters 2.4k Views 2 Watching
  • 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.
  • N Offline
    N Offline
    Neo Mod
    wrote on last edited by Neo Mod
    #1

    Hi everyone,

    here I am (again, sorry :-p ) asking for your guidance.

    After my initial post about “general ideas” with MySensors and I moved on to the next phase: buying all the components.

    I bought two things to start familiarize with this project:

    • A NODE-MCU ESP8266 Development Board vers. 1.0 T
    • A Capacitive Soil Moisture Sensor by DFROBOT V. 1.0

    The idea is to use the NODE-MCU ESP8266 as a WiFi Gateway to collect data from sensor and send it to a controller.

    I divided the project in various stages so to easily troubleshoot problems:

    1st stage: Setting up the NODE-MCU with Capacitive Sensor and reading data
    2nd stage: Setting up the MySensors Wi-Fi Gateway on the NODE-MCU and obtaining “calibrated” data from sensor
    3rd stage: Acquiring the data from stage 2 remotely.

    Thanks to all the guides and tutorial here I’ve been able to set-up my Arduino IDE software with the library to use the NODE-MCU ESP8266 board.

    Following the DFROBOT product tutorial I’ve been able to obtain RAW data from the sensor with this sketch:

    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600); // open serial port, set the baud rate as 9600 bps
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      int val;
      val = analogRead(0); //connect sensor to Analog 0
      Serial.print(val); //print the value to serial port
      delay(1000);
    
    }
    
    

    Now the problem, for me that I’m a total novice to this, is how to set-up the gateway for doing the same thing.

    I tried with this sketch, also including the calibration needed to obtain usable values from the sensor but I only come up with an error that I could not understand.

    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Use a bit lower baudrate for serial prints on ESP8266 than default in MyConfig.h
    #define MY_BAUD_RATE 9600
    
    // Enables and select radio type (if attached)
    //#define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    #define MY_GATEWAY_ESP8266
    
    #define MY_ESP8266_SSID "mywifissid"
    #define MY_ESP8266_PASSWORD "mywifipassword"
    
    // Enable UDP communication
    #define MY_USE_UDP
    
    // Set the hostname for the WiFi Client. This is the hostname
    // it will pass to the DHCP server if not static.
    #define MY_ESP8266_HOSTNAME "sensor-gateway"
    
    // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
    #define MY_IP_ADDRESS 192,168,0,200
    
    // If using static ip you need to define Gateway and Subnet address as well
    #define MY_IP_GATEWAY_ADDRESS 192,168,0,1
    #define MY_IP_SUBNET_ADDRESS 255,255,255,0
    
    // The port to keep open on node server mode
    #define MY_PORT 5003
    
    // How many clients should be able to connect to this gateway (default 1)
    #define MY_GATEWAY_MAX_CLIENTS 2
    
    // Controller ip address. Enables client mode (default is "server" mode).
    // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere.
    #define MY_CONTROLLER_IP_ADDRESS 192, 168, 0, 75
    
    // Enable inclusion mode
    #define MY_INCLUSION_MODE_FEATURE
    
    // Enable Inclusion mode button on gateway
    // #define MY_INCLUSION_BUTTON_FEATURE
    // Set inclusion mode duration (in seconds)
    ///#define MY_INCLUSION_MODE_DURATION 60
    // Digital pin used for inclusion mode button
    //#define MY_INCLUSION_MODE_BUTTON_PIN  3
    
    
    // Set blinking period
    // #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Flash leds on rx/tx/err
    // Led pins used if blinking feature is enabled above
    //#define MY_DEFAULT_ERR_LED_PIN 16  // Error led pin
    //#define MY_DEFAULT_RX_LED_PIN  16  // Receive led pin
    //#define MY_DEFAULT_TX_LED_PIN  16  // the PCB, on board LED
    
    #if defined(MY_USE_UDP)
    #include <WiFiUdp.h>
    #endif
    
    #include <ESP8266WiFi.h>
    
    #define CHILD_ID 0
    
    #include <MySensors.h>
    
    // values needed for calibrating the sensor output
    
    int AirValue = 694;
    int WaterValue = 344;
    int intervals = (AirValue - WaterValue)/3; 
    int soilMoistureValue = 0;
    MyMessage msg(CHILD_ID, V_LEVEL);
    unsigned long SLEEP_TIME = 30000;
    
    int sensorPin = A0;
    
    void presentation()
    {
    	// Present locally attached sensors here
      present(CHILD_ID, S_MOISTURE);
     }
    
    
    void loop()
    {
    	// Send locally attached sensors data here
    int soilMoistureValue;
    soilMoistureValue = analogRead(sensorPin);
    
    if(soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals))
    {
      send(msg.set("Very WET"));
    }
    else if(soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
    {
      send(msg.set("Wet"));
    }
    else if(soilMoistureValue < AirValue && soilMoistureValue > (AirValue - intervals))
    {
        send(msg.set("Dry"));;
    }
    
    sleep(SLEEP_TIME);
    
    }
    
    

    When compiling this code using the MySensors Library v. 2.1.1 ,I receive an error code: I'm sure it's because I'm doing something wrong out of inexperience so I hope if someone among the most experienced users here could help me out...

    mfalkviddM 1 Reply Last reply
    0
    • N Neo Mod

      Hi everyone,

      here I am (again, sorry :-p ) asking for your guidance.

      After my initial post about “general ideas” with MySensors and I moved on to the next phase: buying all the components.

      I bought two things to start familiarize with this project:

      • A NODE-MCU ESP8266 Development Board vers. 1.0 T
      • A Capacitive Soil Moisture Sensor by DFROBOT V. 1.0

      The idea is to use the NODE-MCU ESP8266 as a WiFi Gateway to collect data from sensor and send it to a controller.

      I divided the project in various stages so to easily troubleshoot problems:

      1st stage: Setting up the NODE-MCU with Capacitive Sensor and reading data
      2nd stage: Setting up the MySensors Wi-Fi Gateway on the NODE-MCU and obtaining “calibrated” data from sensor
      3rd stage: Acquiring the data from stage 2 remotely.

      Thanks to all the guides and tutorial here I’ve been able to set-up my Arduino IDE software with the library to use the NODE-MCU ESP8266 board.

      Following the DFROBOT product tutorial I’ve been able to obtain RAW data from the sensor with this sketch:

      void setup() {
        // put your setup code here, to run once:
      Serial.begin(9600); // open serial port, set the baud rate as 9600 bps
      }
      
      void loop() {
        // put your main code here, to run repeatedly:
        int val;
        val = analogRead(0); //connect sensor to Analog 0
        Serial.print(val); //print the value to serial port
        delay(1000);
      
      }
      
      

      Now the problem, for me that I’m a total novice to this, is how to set-up the gateway for doing the same thing.

      I tried with this sketch, also including the calibration needed to obtain usable values from the sensor but I only come up with an error that I could not understand.

      // Enable debug prints to serial monitor
      #define MY_DEBUG
      
      // Use a bit lower baudrate for serial prints on ESP8266 than default in MyConfig.h
      #define MY_BAUD_RATE 9600
      
      // Enables and select radio type (if attached)
      //#define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      
      #define MY_GATEWAY_ESP8266
      
      #define MY_ESP8266_SSID "mywifissid"
      #define MY_ESP8266_PASSWORD "mywifipassword"
      
      // Enable UDP communication
      #define MY_USE_UDP
      
      // Set the hostname for the WiFi Client. This is the hostname
      // it will pass to the DHCP server if not static.
      #define MY_ESP8266_HOSTNAME "sensor-gateway"
      
      // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
      #define MY_IP_ADDRESS 192,168,0,200
      
      // If using static ip you need to define Gateway and Subnet address as well
      #define MY_IP_GATEWAY_ADDRESS 192,168,0,1
      #define MY_IP_SUBNET_ADDRESS 255,255,255,0
      
      // The port to keep open on node server mode
      #define MY_PORT 5003
      
      // How many clients should be able to connect to this gateway (default 1)
      #define MY_GATEWAY_MAX_CLIENTS 2
      
      // Controller ip address. Enables client mode (default is "server" mode).
      // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere.
      #define MY_CONTROLLER_IP_ADDRESS 192, 168, 0, 75
      
      // Enable inclusion mode
      #define MY_INCLUSION_MODE_FEATURE
      
      // Enable Inclusion mode button on gateway
      // #define MY_INCLUSION_BUTTON_FEATURE
      // Set inclusion mode duration (in seconds)
      ///#define MY_INCLUSION_MODE_DURATION 60
      // Digital pin used for inclusion mode button
      //#define MY_INCLUSION_MODE_BUTTON_PIN  3
      
      
      // Set blinking period
      // #define MY_DEFAULT_LED_BLINK_PERIOD 300
      
      // Flash leds on rx/tx/err
      // Led pins used if blinking feature is enabled above
      //#define MY_DEFAULT_ERR_LED_PIN 16  // Error led pin
      //#define MY_DEFAULT_RX_LED_PIN  16  // Receive led pin
      //#define MY_DEFAULT_TX_LED_PIN  16  // the PCB, on board LED
      
      #if defined(MY_USE_UDP)
      #include <WiFiUdp.h>
      #endif
      
      #include <ESP8266WiFi.h>
      
      #define CHILD_ID 0
      
      #include <MySensors.h>
      
      // values needed for calibrating the sensor output
      
      int AirValue = 694;
      int WaterValue = 344;
      int intervals = (AirValue - WaterValue)/3; 
      int soilMoistureValue = 0;
      MyMessage msg(CHILD_ID, V_LEVEL);
      unsigned long SLEEP_TIME = 30000;
      
      int sensorPin = A0;
      
      void presentation()
      {
      	// Present locally attached sensors here
        present(CHILD_ID, S_MOISTURE);
       }
      
      
      void loop()
      {
      	// Send locally attached sensors data here
      int soilMoistureValue;
      soilMoistureValue = analogRead(sensorPin);
      
      if(soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals))
      {
        send(msg.set("Very WET"));
      }
      else if(soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
      {
        send(msg.set("Wet"));
      }
      else if(soilMoistureValue < AirValue && soilMoistureValue > (AirValue - intervals))
      {
          send(msg.set("Dry"));;
      }
      
      sleep(SLEEP_TIME);
      
      }
      
      

      When compiling this code using the MySensors Library v. 2.1.1 ,I receive an error code: I'm sure it's because I'm doing something wrong out of inexperience so I hope if someone among the most experienced users here could help me out...

      mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #2

      @Neo-Mod posting the actual error could be very useful ;-)

      N 1 Reply Last reply
      1
      • mfalkviddM Offline
        mfalkviddM Offline
        mfalkvidd
        Mod
        wrote on last edited by
        #3

        Was the error

        error: no match for 'operator[]' (operand types are 'inputBuffer' and 'int')
        

        in that case, my google-fu took me to https://github.com/mysensors/MySensors/issues/369 which has been fixed in 2.2.0-beta.

        Using library ESP8266WiFi at version 1.0 in folder: C:\Users\Micke\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi 
        Using library MySensors at version 2.2.0-beta in folder: R:\Documents\Arduino\libraries\MySensors 
        Using library EEPROM at version 1.0 in folder: C:\Users\Micke\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\EEPROM 
        
        Sketch uses 236,893 bytes (22%) of program storage space. Maximum is 1,044,464 bytes.
        Global variables use 32,944 bytes (40%) of dynamic memory, leaving 48,976 bytes for local variables. Maximum is 81,920 bytes.
        

        So either use 2.2.0-beta or wait for the next stable release.

        1 Reply Last reply
        0
        • N Offline
          N Offline
          Neo Mod
          wrote on last edited by
          #4

          Oh my...sorry, my mistake! I forgot to paste it on the message, thank you for your patience.

          Here it is the error: there are some small parts in italian at the end regarding the WiFi Library used. If needed I can translate those.

          Arduino:1.8.3 (Windows 10), Scheda:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 9600, 4M (3M SPIFFS)"
          
          In file included from D:\NeoMod\Documents\Arduino\libraries\MySensors/MySensors.h:200:0,
          
                           from D:\NeoMod\Documents\Arduino\prova_gateway\prova_gateway.ino:135:
          
          D:\NeoMod\Documents\Arduino\libraries\MySensors/core/MyGatewayTransportEthernet.cpp: In function 'bool gatewayTransportAvailable()':
          
          D:\NeoMod\Documents\Arduino\libraries\MySensors/core/MyGatewayTransportEthernet.cpp:302:35: error: no match for 'operator[]' (operand types are 'inputBuffer' and 'int')
          
             _ethernetServer.read(inputString[0].string, MY_GATEWAY_MAX_RECEIVE_LENGTH);
          
                                             ^
          
          D:\NeoMod\Documents\Arduino\libraries\MySensors/core/MyGatewayTransportEthernet.cpp:303:14: error: no match for 'operator[]' (operand types are 'inputBuffer' and 'int')
          
             inputString[0].string[packet_size] = 0;
          
                        ^
          
          In file included from D:\NeoMod\Documents\Arduino\libraries\MySensors/MySensors.h:28:0,
          
                           from D:\NeoMod\Documents\Arduino\prova_gateway\prova_gateway.ino:135:
          
          D:\NeoMod\Documents\Arduino\libraries\MySensors/core/MyGatewayTransportEthernet.cpp:304:55: error: no match for 'operator[]' (operand types are 'inputBuffer' and 'int')
          
             debug(PSTR("UDP packet received: %s\n"), inputString[0].string);
          
                                                                 ^
          
          D:\NeoMod\Documents\Arduino\libraries\MySensors/core/MySensorsCore.h:90:40: note: in definition of macro 'debug'
          
           #define debug(x,...) hwDebugPrint(x, ##__VA_ARGS__)   //!< debug, to be removed (follow-up PR)
          
                                                  ^
          
          In file included from D:\NeoMod\Documents\Arduino\libraries\MySensors/MySensors.h:200:0,
          
                           from D:\NeoMod\Documents\Arduino\prova_gateway\prova_gateway.ino:135:
          
          D:\NeoMod\Documents\Arduino\libraries\MySensors/core/MyGatewayTransportEthernet.cpp:305:58: error: no match for 'operator[]' (operand types are 'inputBuffer' and 'int')
          
             const bool ok = protocolParse(_ethernetMsg, inputString[0].string);
          
                                                                    ^
          
          Più di una libreria trovata per "WiFiUdp.h"
          Usata: C:\Users\deimo\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi
          Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
          Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
          Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
          Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
          exit status 1
          Errore durante la compilazione per la scheda NodeMCU 1.0 (ESP-12E Module).
          
          
          1 Reply Last reply
          0
          • mfalkviddM mfalkvidd

            @Neo-Mod posting the actual error could be very useful ;-)

            N Offline
            N Offline
            Neo Mod
            wrote on last edited by
            #5

            @mfalkvidd thank you! I didn't noticed that among the whole log, my ignorance about this just kicked-in. Thank you again fo your help, I'll read on how to set the beta library and compile again.

            1 Reply Last reply
            1
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            32

            Online

            11.7k

            Users

            11.2k

            Topics

            113.1k

            Posts


            Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • MySensors
            • OpenHardware.io
            • Categories
            • Recent
            • Tags
            • Popular