Преобразование 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);
}
@YunBeginner, 👍5
Обсуждение1 ответ
(Обновление ответа из комментариев.)
ОП ответил на их собственный вопрос, они пропустили код для подключения к веб-сервису
если (клиент.подключение(сервер, 80))
- Как получить HTTPS на Arduino?
- Как получить уникальный идентификатор для всех плат Arduino?
- Как поступить с файлом fzz
- Как сделать повторитель Wi-Fi на Arduino?
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- HTTP-запросы с использованием Arduino
- Как заставить инфракрасный термодатчик MEMS - D6T-44-L06 работать с Arduino?
- Ошибка easy_install pip на Arduino Yun
Хорошо, я понял это, мне не хватало кода для подключения к веб-сервису если (клиент.подключение(сервер, 80)) {, @YunBeginner