Преобразование Arduino Uno в скетч Ethernet Shield для Arduino Yún

Я новичок в Arduino Uno и пытаюсь преобразовать скетч, написанный для Arduino Uno, в Ethernet Shield. Скетч отправляет HTTP - сообщения в мобильные службы Azure.

Я добавил библиотеки Bridge.h и YunClient.h вместо библиотеки Ethernet.h для Uno.

Мой модифицированный скетч компилируется, однако я не думаю, что http-сообщения работают. Я не вижу, чтобы моя таблица обновлялась в Azure. /* ** Этот образец скетча Arduino загружает данные телеметрии в мобильные службы Azure. ** Смотрите полную версию статьи здесь: http://hypernephelist.com/2014/07/11/arduino-uno-azure-mobile-services.html ** ** Thomas Conté @tomconte */

#include <Bridge.h>
#include <YunClient.h>
//#include <Ethernet.h> // удалено, как не используется Yun
#include <SPI.h>

// не уверен, требуются ли эти библиотеки?
#include <HttpClient.h>
#include <Process.h>

// MAC-адрес экрана Ethernet (наклейка сзади)
//byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// 90:A2:DA:F8:28:38

// Адрес службы мобильной связи Azure
// Вы можете найти это в своей панели мониторинга служб
const char *server = "myhost.azure-mobile.net";

// Имя таблицы мобильной службы Azure
// Имя созданной вами таблицы
const char *table_name = "my_data";

// Ключ приложения мобильной службы Azure
// Вы можете найти этот ключ в меню "Управление ключами" на панели
const char *ams_key = "HJRxFXXXXXXXXXXXXXXXXXXXNQoMcXXXXXXx99";

//Клиент EthernetClient;
YunClient client;

char buffer[64];

/*
** Отправьте запрос HTTP POST в API данных мобильной службы Azure
*/

void send_request(int value)
{
  Serial.println("\nconnecting...");

    Serial.print("sending ");
    Serial.println(value);

    // POST URI
    sprintf(buffer, "POST /tables/%s HTTP/1.1", table_name);
    client.println(buffer);

    // Заголовок хоста
    sprintf(buffer, "Host: %s", server);
    client.println(buffer);

    // Ключ приложения мобильных служб Azure
    sprintf(buffer, "X-ZUMO-APPLICATION: %s", ams_key);
    client.println(buffer);

    // JSON content type
    client.println("Content-Type: application/json");

    // POST body
    sprintf(buffer, "{\"value\": %d}", value);

    // Длина содержимого
    client.print("Content-Length: ");
    client.println(strlen(buffer));

    // Конец заголовков
    client.println();

    // Тело запроса
    client.println(buffer);

}

/*
** Дождитесь ответа
*/

void wait_response()
{
  while (!client.available()) {
    if (!client.connected()) {
      return;
    }
  }
}


/*
** Прочитайте ответ и сбросьте его в последовательный порт
*/

void read_response()
{
  bool print = true;

  while (client.available()) {
    char c = client.read();
    // Печатать только до тех пор, пока не будет возвращена первая каретка
    if (c == '\n')
      print = false;
    if (print)
      Serial.print(c);
  }
}

/*
** Закройте соединение.
*/

void end_request()
{
  client.stop();
}

/*
** Arduino Setup
*/

void setup()
{
Serial.begin(9600);
Serial.println("Starting Bridge");
Bridge.begin();

}

/*
** Arduino Loop
*/

void loop()
{
  int val = analogRead(A0);

  send_request(val);
  wait_response();
  read_response();
  end_request();

  delay(1000);
}

, 👍5

Обсуждение

Хорошо, я понял это, мне не хватало кода для подключения к веб-сервису если (клиент.подключение(сервер, 80)) {, @YunBeginner


1 ответ


1

(Обновление ответа из комментариев.)

ОП ответил на их собственный вопрос, они пропустили код для подключения к веб-сервису

если (клиент.подключение(сервер, 80))

,