Народ очень нужна помощь. Хочу чтобы ардуино отправляла данные на веб сервер. Но отправляет только, когда я запускаю "Монитор порта", и только 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); }
Эта функция проверяет возможность блокировки операции записи в порт. https://www.arduino.cc/en/Serial/AvailableForWrite С отправкой длинных строк она не поможет. Нужно будет как то делить длинные строки. Эта функция проверят, что USB подключение установлено. https://www.arduino.cc/en/Serial/IfSerial Обычно делают while(!Serial){} т.е. ждут когда подключение установится, но можно ничего не писать в Serial, если USB не подключен.
Это вы адрес звёздочками спрятали или так в коде? Код (C++): // Адрес сервера char server[] = "**************";
Я понимаю, что где то косяк с соединением на втором круге. Т. к. 1 раз и GET и POST запрос отрабатывает как надо, а потом отвечает кодом "-2"