About sensors and GPIO



  • Hello.
    I want to connect the sensors DHT22 and DS18B20 and the capacitive soil moisture sensor to Core 2 for operation.
    Below is the sketch. However, when I wrote the sketch with the pin stuck, fatal error occurred.And after that, I couldn't write.

    Core 2 has been lucky enough to come back, but it's scary.Therefore, I would like to know the GPIO that should point to the sensor. Please let me know.
    Thank you.

    //#include <M5Stack.h>
    #include <M5Core2.h>
    
    #include "DHT.h"  
    //#define DHTPIN 13  // Basic.DHT22.
    #define DHTPIN 27  // Core2.DHT22 .19.27
    #define DHTTYPE DHT22
    DHT dht(DHTPIN, DHTTYPE);
    
    #include <OneWire.h>  //DS18B20
    #include <DallasTemperature.h>  //DS18B20
    //#define ONE_WIRE_BUS 0 // Basic.DS18B20. 
    #define ONE_WIRE_BUS 26 // Core2.DS18B20.25.26.27
    OneWire oneWire(ONE_WIRE_BUS); // OneWire
    DallasTemperature sensors(&oneWire);//  Dallas Temperature sensor
    
    #define PinSoilMoist 35  //CapSoilMoistSensor
      const int dry = 3700;   
      const int wet = 1400; 
    
    int inttemp , inthumid ;  
    int intsoilmoist , soilval , intsoiltemp;  
    float temperature, humidity, soilMoist, soilTemp;  
    
    void getData() {
    delay(2000);
    dht.begin();
    float temperature = dht.readTemperature();
    float humidity = dht.readHumidity();
    if (isnan(temperature) || isnan(humidity) ) {
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
    }
      inttemp = int ( temperature ); 
      inthumid = int ( humidity );
      Serial.print( inttemp ); Serial.println(" *C, ");  
      Serial.print( inthumid ); Serial.println(" RH% ");
    
      soilMoist = analogRead(PinSoilMoist);  
      soilval = map(soilMoist, dry, wet, 0, 100); 
      if(soilval >= 99)
    {
      intsoilmoist = 99;
    }
    else if(soilval <=20)
    {
      intsoilmoist = 20;
    }
    else if(soilval >21 && intsoilmoist < 99)
    {
      intsoilmoist = soilval ;  
    }
    //  Serial.print( soilMoist ); Serial.println(" Pin ");  
      Serial.print( intsoilmoist ); Serial.println(" soil% ");  
      delay(250);
    
      sensors.requestTemperatures();  
      float soilTemp = sensors.getTempCByIndex(0);
      intsoiltemp = int ( soilTemp );  
      Serial.print( intsoiltemp ); Serial.println(" soil*C, ");  
    }
    
    void sendSigfox() {
      String msg = String (inttemp, HEX)    
                   + String (inthumid, HEX)
                   + String (intsoilmoist, HEX)
                   + String (intsoiltemp, HEX);
    
       Serial2.println("AT$SF=" + msg);
      Serial.println("AT$SF=" + msg);
    }
    
    void setup() {
      M5.begin(true, false, true);  
    //  M5.Speaker.write(0); 
    //  M5.Axp.SetSpkEnable(0);  
    
    //  Serial2.begin(9600, SERIAL_8N1, 16, 17);  
      Serial2.begin(9600, SERIAL_8N1, 13, 14);  
    //  Serial.begin(9600);  
    }
    
    void loop() {
      getData();
      sendSigfox();  
    
    //  M5.Power.deepSleep(SLEEP_SEC(60*15)); 
      M5.Axp.DeepSleep(SLEEP_SEC(60*0.5)); 
    }
    

  • Global Moderator

    @takero hello, is the DHT, DS18B20 and soil moisture sensor are M5 products? have you tried to use UIFlow for this or you'd prefer Arduino instead?



  • @zontex Thank you.
    DHT, DS18B20 and Soil Moisture Sensor are not M5 products. Use Arduino.
    Thank you.