为什么在ss.begin(9600)时无法将数据发送到mqtt;活性?

时间:2019-12-19 16:12:11

标签: arduino gps mqtt

为什么在ss.begin(9600)时不能将数据发送到mqtt;激活了吗?

  /* code that can be sent */

      #define TINY_GSM_MODEM_SIM800
      #include <TinyGPS++.h>
      #include <SoftwareSerial.h>
      #include <TinyGsmClient.h>
      #include <PubSubClient.h>
      #include "DHT.h"

      #define SensorPin A3  
      #define DHTPIN 4
      #define pompa 7
      SoftwareSerial SerialAT(8,9); // RX, TX

      static const int RXPin = 11, TXPin = 10;
      //static const uint32_t GPSBaud = 9600;
      // The TinyGPS++ object
      TinyGPSPlus gps;

      unsigned long int avgValue;
      float b;
      int buf[10],temp;

      //Network details
      const char apn[]  = "my3g";
      const char user[] = "";
      const char pass[] = "";

      // MQTT details
      const char* broker = "tailor.cloudmqtt.com";
      const char* uss = "*******";
      const char* pwd = "*******";
      const char* topicOut = "/coba";
      const char* topicIn = "/tombol";

      #define DHTTYPE DHT11
      int sensor= A0;

      SoftwareSerial ss(11, 10);
      TinyGsm modem(SerialAT);
      TinyGsmClient client(modem);
      PubSubClient mqtt(client);
      DHT dht(DHTPIN, DHTTYPE);

      void setup()
      {
        Serial.begin(9600);
        SerialAT.begin(9600);
        dht.begin();

        pinMode(sensor, INPUT);
        pinMode(pompa, OUTPUT);
        digitalWrite(pompa, HIGH);
        Serial.println("System start.");
        modem.restart();
        Serial.println("Modem: " + modem.getModemInfo());
        Serial.println("Searching for telco provider.");
        if(!modem.waitForNetwork())
        {
          Serial.println("fail");
          while(true);
        }
        Serial.println("Connected to telco.");
        Serial.println("Signal Quality: " + String(modem.getSignalQuality()));

        Serial.println("Connecting to GPRS network.");
        if (!modem.gprsConnect(apn, user, pass))
        {
          Serial.println("fail");
          while(true);
        }
        Serial.println("Connected to GPRS: " + String(apn));

        mqtt.setServer(broker,17063);
        mqtt.setCallback(mqttCallback);
        Serial.println("Connecting to MQTT Broker: " + String(broker));
        while(mqttConnect()==false) continue;
        Serial.println();
      //  ss.begin(9600);                                             //can't be send to mqtt broker
        Serial.println("GPS");
      }

      void loop()
      {
      //  if (ss.available() > 0){
      //    gps.encode(ss.read());
      //    if (gps.location.isUpdated()){

            //soil moisture
            int data = analogRead(sensor);
            int nilai = (105-((data/1023.00)*148));
            //DHT 11
            float h = dht.readHumidity();
            float t = dht.readTemperature();
            String H = String(h);
            String T = String(t);

            //DATA PH
            for(int i=0;i<10;i++)       //Get 10 sample value from the sensor for smooth the value
            { 
              buf[i]=analogRead(SensorPin);
              delay(10);
            }
            for(int i=0;i<9;i++)        //sort the analog from small to large
            {
              for(int j=i+1;j<10;j++)
              {
                if(buf[i]>buf[j])
                {
                  temp=buf[i];
                  buf[i]=buf[j];
                  buf[j]=temp;
                }
              }
            }
            avgValue=0;
            for(int i=2;i<8;i++)                      //take the average value of 6 center sample
            avgValue+=buf[i];
            float phValue=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
            phValue = 3.5*phValue;                    //convert the millivolt into pH value
            String ph = String(phValue,2);

            double LAT = double(gps.location.lat());
            double LNG = double(gps.location.lng());

            String Lat = String(LAT,6);
            String Long = String(LNG,6);

            // data digabung
            //{"id":123,"Hum":200,"Temp":12,"Soil":123,"Ph":23,"Long":1223,"Lat":2323}
            String A = "{\"Hum\":" + H + ",\"Temp\":" + T + ",\"Soil\":" + nilai + ",\"Ph\":" + ph + ",\"Long\":" + Lat+",\"Lat\":" + Long + "}";
      //      String A = "{\"Hum\":" + H + ",\"Temp\":" + T + ",\"Soil\":" + nilai + ",\"Ph\":" + ph + ",\"Long\":-6.777722,\"Lat\":1.677734}";
            if (isnan(h) || isnan(t)) {
              Serial.println("Failed to read from DHT sensor!");
              return;
            }

            String message = A;
            Serial.println(A);
            while(Serial.available()) message+=(char)Serial.read();
            mqtt.publish(topicOut, message.c_str());

            delay(500);
            if(mqtt.connected())
            {
              mqtt.loop();
            }             
      //    }
      //  }
      }

      boolean mqttConnect()
      {
        if(!mqtt.connect("GsmClientTest",uss, pwd))
        {
          Serial.print(".");
          return false;
        }
        Serial.println("Connected to broker.");
        mqtt.subscribe(topicIn);
        return mqtt.connected();
      }

      void mqttCallback(char* topic, byte* payload, unsigned int len)
      {
        Serial.print("Message receive [");
        Serial.print(topic);
        Serial.print("] : ");
        String msg = "";
        int i = 0;
        while (i < len){
            msg += (char)payload[i++];
        }
        Serial.print(msg);
        if (msg == "on"){
          digitalWrite(pompa, LOW);
        } else if (msg == "off"){
          digitalWrite(pompa, HIGH);
        }
      //  Serial.write(payload, len);
        Serial.println();
      }

"""


//---------------------------------------------------------------------------------------

/* code that can't be sent */
"""
      #define TINY_GSM_MODEM_SIM800
      #include <TinyGPS++.h>
      #include <SoftwareSerial.h>
      #include <TinyGsmClient.h>
      #include <PubSubClient.h>
      #include "DHT.h"

      #define SensorPin A3  
      #define DHTPIN 4
      #define pompa 7
      SoftwareSerial SerialAT(8,9); // RX, TX

      static const int RXPin = 11, TXPin = 10;
      //static const uint32_t GPSBaud = 9600;
      // The TinyGPS++ object
      TinyGPSPlus gps;

      unsigned long int avgValue;
      float b;
      int buf[10],temp;

      //Network details
      const char apn[]  = "my3g";
      const char user[] = "";
      const char pass[] = "";

      // MQTT details
      const char* broker = "tailor.cloudmqtt.com";
      const char* uss = "gvrwasgg";
      const char* pwd = "hqW7Act1FjRd";
      const char* topicOut = "/coba";
      const char* topicIn = "/tombol";

      #define DHTTYPE DHT11
      int sensor= A0;

      SoftwareSerial ss(11, 10);
      TinyGsm modem(SerialAT);
      TinyGsmClient client(modem);
      PubSubClient mqtt(client);
      DHT dht(DHTPIN, DHTTYPE);

      void setup()
      {
        Serial.begin(9600);
        SerialAT.begin(9600);
        dht.begin();

        pinMode(sensor, INPUT);
        pinMode(pompa, OUTPUT);
        digitalWrite(pompa, HIGH);
        Serial.println("System start.");
        modem.restart();
        Serial.println("Modem: " + modem.getModemInfo());
        Serial.println("Searching for telco provider.");
        if(!modem.waitForNetwork())
        {
          Serial.println("fail");
          while(true);
        }
        Serial.println("Connected to telco.");
        Serial.println("Signal Quality: " + String(modem.getSignalQuality()));

        Serial.println("Connecting to GPRS network.");
        if (!modem.gprsConnect(apn, user, pass))
        {
          Serial.println("fail");
          while(true);
        }
        Serial.println("Connected to GPRS: " + String(apn));

        mqtt.setServer(broker,17063);
        mqtt.setCallback(mqttCallback);
        Serial.println("Connecting to MQTT Broker: " + String(broker));
        while(mqttConnect()==false) continue;
        Serial.println();
      //  ss.begin(9600);
        Serial.println("GPS");
      }

      void loop()
      {
      //  ss.begin(9600);
      //  if (ss.available() > 0){
      //    gps.encode(ss.read());
      //    if (gps.location.isUpdated()){

            //soil moisture
            int data = analogRead(sensor);
            int nilai = (105-((data/1023.00)*148));
            //DHT 11
            float h = dht.readHumidity();
            float t = dht.readTemperature();
            String H = String(h);
            String T = String(t);

            //DATA PH
            for(int i=0;i<10;i++)       //Get 10 sample value from the sensor for smooth the value
            { 
              buf[i]=analogRead(SensorPin);
              delay(10);
            }
            for(int i=0;i<9;i++)        //sort the analog from small to large
            {
              for(int j=i+1;j<10;j++)
              {
                if(buf[i]>buf[j])
                {
                  temp=buf[i];
                  buf[i]=buf[j];
                  buf[j]=temp;
                }
              }
            }
            avgValue=0;
            for(int i=2;i<8;i++)                      //take the average value of 6 center sample
            avgValue+=buf[i];
            float phValue=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
            phValue = 3.5*phValue;                    //convert the millivolt into pH value
            String ph = String(phValue,2);

            double LAT = double(gps.location.lat());
            double LNG = double(gps.location.lng());

            String Lat = String(LAT,6);
            String Long = String(LNG,6);

            // data digabung
            //{"id":123,"Hum":200,"Temp":12,"Soil":123,"Ph":23,"Long":1223,"Lat":2323}
            String A = "{\"Hum\":" + H + ",\"Temp\":" + T + ",\"Soil\":" + nilai + ",\"Ph\":" + ph + 
 ",\"Long\":" + Lat+",\"Lat\":" + Long + "}";
      //      String A = "{\"Hum\":" + H + ",\"Temp\":" + T + ",\"Soil\":" + nilai + ",\"Ph\":" + ph + ",\"Long\":-6.777722,\"Lat\":1.677734}";
            if (isnan(h) || isnan(t)) {
              Serial.println("Failed to read from DHT sensor!");
              return;
            }

            String message = A;
            Serial.println(A);
            while(Serial.available()) message+=(char)Serial.read();
            mqtt.publish(topicOut, message.c_str());

            delay(500);
            if(mqtt.connected())
            {
              mqtt.loop();
            }             
      //    }
      //  }
      }

      boolean mqttConnect()
      {
        if(!mqtt.connect("GsmClientTest",uss, pwd))
        {
          Serial.print(".");
          return false;
        }
        Serial.println("Connected to broker.");
        mqtt.subscribe(topicIn);
        return mqtt.connected();
      }

      void mqttCallback(char* topic, byte* payload, unsigned int len)
      {
        Serial.print("Message receive [");
        Serial.print(topic);
        Serial.print("] : ");
        String msg = "";
        int i = 0;
        while (i < len){
            msg += (char)payload[i++];
        }
        Serial.print(msg);
        if (msg == "on"){
          digitalWrite(pompa, LOW);
        } else if (msg == "off"){
          digitalWrite(pompa, HIGH);
        }
      //  Serial.write(payload, len);
        Serial.println();
      }

我想要这个数据

"{\" Hum \ ":" + H + ", \" Temp \ ":" + T + ", \" Soil \ ":" + value + ", \" Ph \ ":" + ph + ", \" Long \ ":" + Lat + ", \" Lat \ ":" + Long + "}"

可以发送到CloudMQTT。

0 个答案:

没有答案