Нужна помощь

Тема в разделе "Arduino & Shields", создана пользователем Сергей111, 24 июн 2017.

  1. Народ очень нужна помощь.
    Хочу чтобы ардуино отправляла данные на веб сервер.
    Но отправляет только, когда я запускаю "Монитор порта", и только 1 раз.
    Подскажите пожалуйста, где я налажал.

    Код (C++):
    #include <SPI.h>
    #include <Ethernet.h>
    #include <ArduinoHttpClient.h>
    #include "DHT.h"

    //Константы
    #define DHTPIN 2     // Пин на который подключен сигнал с датчика
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес

    //Переменные
    float h;                                    // Значение температуры
    float t;

    String response;
    int statusCode = 0;

    // Адрес сервера
    char server[] = "**************";
    int port = 80;

    EthernetClient inet;
    HttpClient client = HttpClient(inet, server, port);
    //ниже тип нашего датчика DHT
    #define DHTTYPE DHT11   // DHT 11
    //#define DHTTYPE DHT22   // DHT 22  (AM2302)
    //#define DHTTYPE DHT21   // DHT 21 (AM2301)
    DHT dht(DHTPIN, DHTTYPE);//создаем объект DHT

    /*--------------------------------------------------------------
    Необходимые настройки
    --------------------------------------------------------------*/

    void setup() {
     
      Serial.begin(9600);
     
      if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
        // try to congifure using IP address instead of DHCP:
        Ethernet.begin(mac);
      }
     
      IPAddress ip = Ethernet.localIP();
        Serial.print("Attempting to connect to Network IP: ");
        Serial.println(ip);

      dht.begin();

    }

    /*--------------------------------------------------------------
    Необходимые настройки
    --------------------------------------------------------------*/

    void loop() {
     
        h = dht.readHumidity();                       //читаем влажность с датчика
        t = dht.readTemperature();                    //читаем температуру по Цельсию

      String dweetName = "indication/";
      String path = "/api/v1.0/" + dweetName;

      String contentType = "application/json";

      // assemble the body of the POST message:
      String postData = "{\"data\":\"";
      postData += t;
      postData += "\",\"sensor\":\"1\"}";

      Serial.println("making POST request");
      Serial.println(path);
      Serial.println(postData);
     
      // send the POST request
      client.post(path, contentType, postData);
     
      // read the status code and body of the response
      statusCode = client.responseStatusCode();
      response = client.responseBody();

      Serial.print("Status code: ");
      Serial.println(statusCode);
      Serial.print("Response: ");
      Serial.println(response);
     
      if ( statusCode == 201 ){
        Serial.println("Данные добавлены.");
        delay(10000);
      }
     
      Serial.println("Ждем 60 секунд");
      delay(60000);

    }
     
  2. mcureenab

    mcureenab Гуру

    Arduino какая? UNO? Leonardo? micro? ??? они по разному работают с Serial.
     
  3. mcureenab

    mcureenab Гуру

    Эта функция проверяет возможность блокировки операции записи в порт.

    https://www.arduino.cc/en/Serial/AvailableForWrite

    С отправкой длинных строк она не поможет. Нужно будет как то делить длинные строки.

    Эта функция проверят, что USB подключение установлено.

    https://www.arduino.cc/en/Serial/IfSerial

    Обычно делают while(!Serial){}
    т.е. ждут когда подключение установится, но можно ничего не писать в Serial, если USB не подключен.
     
  4. arduino mega
     
  5. а что может значить в статус коде: "-2"?
     
  6. mcureenab

    mcureenab Гуру

    Статус чего?
     
  7. mcureenab

    mcureenab Гуру

  8. mcureenab

    mcureenab Гуру

    Это вы адрес звёздочками спрятали или так в коде?


    Код (C++):
    // Адрес сервера
    char server[] = "**************";
     
     
  9. Не в коде нормальный адрес.
     
  10. Я понимаю, что где то косяк с соединением на втором круге.
    Т. к. 1 раз и GET и POST запрос отрабатывает как надо, а потом отвечает кодом "-2"
     
  11. mcureenab

    mcureenab Гуру

    Добавьте

    client.stop ();