Соединение Arduino с сервером не удалось

Я пытаюсь подключить Arduino Uno и Ethernet Shield и попытаться отправить некоторые данные в веб-приложение asp.net api. Когда я загружаю скетч, у меня не удалось подключиться к последовательному монитору. Я не понимаю, что происходит не так? Ниже приведен код, который я использую

#include "cactus_io_DHT22.h"
#include <SPI.h>
#include <Ethernet.h>
#include <Client.h>

#define DHT22_PIN 2

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xDD };

IPAddress ip(192,168,0,177);
IPAddress server(192,168,0,11);
EthernetClient client;

DHT22 dht(DHT22_PIN);
float heatindex1 =0.00;
float heatindex2 = 0.00;


void setup() {
  Ethernet.begin(mac,ip);   
    delay(1000);  Serial.begin(9600); 

    Serial.println("connecting...");   
    if (client.connect(server, 80)) {
      Serial.println("connected :D ");   
    }
  Serial.print("Arduino server IP address: ");
  Serial.println(Ethernet.localIP());
  Serial.println("DHT22 Humidity - Temperature Sensor");
  Serial.println("RH\t\tTemp (C)\tTemp (F)\tHeat Index (C)\t Heat Index     
 (F)\t Max(C)\t\t Min(C)");

  dht.begin();
  dht.readHumidity();
  dht.readTemperature();

}

float max1=dht.temperature_C;
 float min1=100;

void loop() {
  dht.readHumidity();
  dht.readTemperature();
  heatindex1=dht.computeHeatIndex_C();
  heatindex2=dht.computeHeatIndex_F();


  if(dht.temperature_C>max1)
  {max1=dht.temperature_C;}
  if(dht.temperature_C<min1)
  {min1=dht.temperature_C;}

  // Проверяем, не удалось ли какое-либо чтение, и выходим раньше (чтобы повторить попытку).
  if (isnan(dht.humidity) || isnan(dht.temperature_C)) {
    Serial.println("DHT sensor read failure!");
    return;
  }
  if (client) {

   // Когда клиент отправляет запрос веб-серверу, этот запрос заканчивается пустой строкой
    boolean currentLineIsBlank = true;

    Serial.println("OK"); }

  if (client.connect(server, 80)) {
    client.print("GET /api/todo?humidity="); 
    client.print(dht.humidity);
    client.print("&temperature1="); 
    client.print(dht.temperature_C);
    client.print("&temperature2="); 
    client.print(dht.temperature_F);
    client.print("&heatindex1="); 
    client.print(heatindex1);
    client.print("&heatindex2="); 
    client.print(heatindex2);
    client.print("&max1="); 
    client.print(max1);
    client.print("&min1="); 
    client.print(min1);// Именно это мы и сделали в разделе тестирования выше. Мы делаем запрос GET так же, как и в нашем браузере, но теперь с использованием оперативных данных с датчика.
    client.println(" HTTP/1.1"); // Часть запроса GET
    client.println("Host: 192.168.0.11"); // ВАЖНО: Если вы используете XAMPP, вам нужно будет узнать IP-адрес вашего компьютера и указать его здесь (это описано в предыдущей статье). Если у вас есть веб-страница, введите ее адрес (например, хост: «www.yourwebpage.com»).
    client.println("Connection: close"); // Часть запроса GET, сообщающая серверу, что мы пересылаем сообщение
    client.println(); // Пустая строка
    client.println(); // Пустая строка
    client.stop();    // Закрываем соединение с сервером

  }

  else {
    //Если Arduino не может подключиться к серверу (вашему компьютеру или веб-странице)
    Serial.println("--> connection failed\n");
  }

   Serial.print(dht.humidity); Serial.print(" %\t\t");
  Serial.print(dht.temperature_C); Serial.print(" *C\t");
  Serial.print(dht.temperature_F); Serial.print(" *F\t");
  Serial.print(dht.computeHeatIndex_C()); Serial.print(" *C\t ");
  Serial.print(dht.computeHeatIndex_F()); Serial.print(" *F\t ");
  Serial.print(max1); Serial.print(" *C\t ");
  Serial.print(min1); Serial.println(" *C\t");

  delay(5000);
}

, 👍0


1 ответ


1

Я не знаю об этой библиотеке, но вы используете код подключения дважды: один раз в setup(), а затем еще раз в цикле().

Вы уже проверяете, существует ли клиент:

if (client) {

Почему вы снова просите несколько строк ниже для подключения?

if (client.connect(server, 80)) {

Я предполагаю, что этот пункт if() не нужен. Или соединение в setup() следует удалить.

Если это не источник ошибки, сначала проверьте, работает ли сервер на 192.168.0.11 и можно ли подключиться (с другого устройства) к порту 80.

,