EnglishRussian

Передача http-запроса через «Cosmo WiFi Shield»

В данном руководстве рассматривается пример отправки данных на веб-сервис pachube.com по беспроводной сети WIFI.

Для работы с WiFi-шилдом потребуется:

  • Базовая плата (Arduino Uno, Cosmo Black Start или другие аналоги)
  • Шилд «Cosmo WiFi Shield» с подключенной антенной
  • USB-кабель, тип A-B
  • Компьютер с Arduino IDE

 

Теория: AT-команды для HTTP PUT

Подключение к точке доступа (AP)
ATC0
AT+WD
AT+NDHCP=0
AT+NSET=192.168.1.25,255.255.255.0,192.168.1.1
AT+WWPA=U17qGmb6eyHZMUv
AT+WA=WiFi

Открываем TCP-соединение с сервисом Pachube (ip, port)
AT+NCTCP=173.203.98.29,80

Начало передачи данных
символ [ESC]
символ [S]
[CID number] (Maybe CID number is 0. AT+CID=?)

Тело данных с заголовками
PUT /v2/feeds/44022.csv HTTP/1.1
User-Agent: curl/7.19.5 (i486-pc-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3libidn/1.15
Host: api.pachube.com
Accept: */*
X-PachubeApiKey:wR9aN5777ssUnCFF-_G9lALAZb3L...
Content-Length: 15
Content-Type: application/x-www-form-urlencoded

Sensor-A, 24.12

Где 44022 — идешник вашего Pachube feed;
wR9aN5777ssUnCFF-_G9lALAZb3L... — ваш Pachube API Key;
Sensor-A, 24.12 — данные, вы можете поменять их на любое другое (ключ, значение).


Завершение передачи, отправка данных на удаленный сервер
символ [ESC]
символ [E]

Закрываем все TCP-соединения
AT+NCLOSEALL

Более подробную информацию по AT-командам смотрите в документации к шилду, а также в Application notes.

 

Пример скетча отправляющего на Pachube данные с датчика температуры

Пример простейшего скетча отправляющий данные с датчика температуры DS18B20 подключенного к pin8.

#include <onewire.h>
#include <dallastemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(115200);
  delay(100);
  Serial.println("ATE0");
  delay(100);
  init_network();
  delay(100);
  sensors.begin();
  delay(100);
}

void loop(void)
{
  sensors.requestTemperatures();
  float temperature = sensors.getTempCByIndex(0);


  Serial.println("AT+NCTCP=173.203.98.29,80");
  delay(5000);
  
  Serial.print(27,BYTE); // символ [ESC]
  delay(100);
  Serial.print(83,BYTE); // символ S
  delay(100);
  Serial.print(48,BYTE); // цифра 0
  delay(100);
  
  
  Serial.println("PUT /v2/feeds/44022.csv HTTP/1.1");
  delay(100);
  Serial.println("User-Agent: curl/7.19.5 (i486-pc-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3libidn/1.15");
  delay(100);
  Serial.println("Host: api.pachube.com");
  delay(100);
  Serial.println("Accept: ");
  Serial.print(42,BYTE); // символ *
  Serial.print(47,BYTE); // символ /
  Serial.println(42,BYTE); // символ *
  delay(100);
  Serial.println("X-PachubeApiKey:wR9aN5777ssUnCFF-_G9lALAZb3L...");
  delay(100);
  Serial.println("Content-Length: 15");
  delay(100);
  Serial.println("Content-Type: application/x-www-form-urlencoded");
  delay(100);
  Serial.print("\n\n");
  Serial.print("Sensor-A,");
  Serial.print(temperature);
  Serial.print("\n");
  delay(100);
  Serial.print(27,BYTE); // символ [ESC]
  delay(100);
  Serial.print(69,BYTE); // символ E
 
  delay(3000);
  Serial.println("AT+NCLOSEALL");

  delay(300000); // пауза 5 минут
}

void init_network (){
  Serial.println("ATC0");
  delay(1000);
  Serial.println("AT+WD");
  delay(1000);
  Serial.println("AT+NDHCP=0");
  delay(1000);
  Serial.println("AT+NSET=192.168.1.25,255.255.255.0,192.168.1.1");
  delay(3000);
  Serial.println("AT+WWPA=U17qGmb6eyHZMUv");
  delay(3000);
  Serial.println("AT+WA=WiFi");
  delay(15000);
}

Пример настроек соединения для отправки HTTP-запроса методом GET — можно посмотреть в Application notes, документ — "HTTP Data Transfer.pdf"

Если у вас возникли какие-либо вопросы по использованию шилда — пишите на наш форум.