Wi-Fi модуль HLK-RM04 http запросы
Добрый день.
Использую данный модуль HLK-RM04 в связке с arduino micro.
Задача в следующем: есть термодатчик; хочется с него отправлять данные на web-server.
Работоспособность проверена считывание данных в браузере.
Почитав про отправку http запросов переделал скетч под формирование строки вида: "GET http://192.168.1.1/arduino.php?t="+ String(t) + "&h="+String(h);
Теперь возник вопрос как заставить arduino+wifi модуль отправлять эту строку на сервер?
Про http запросы, правда только с Ethernet Shield, инфа в интернете есть(пример http://howitmake.ru/blog/arduino/116.html).
Как это повторить используя данный wifi модуль?
Re: Wi-Fi модуль HLK-RM04 http запросы
Отправляете строку в порт командой serialPrint()
Re: Wi-Fi модуль HLK-RM04 http запросы
Цитата:
Сообщение от
Chip
Отправляете строку в порт командой serialPrint()
Может вы имели в виду serial.Print().
Если да, то таким образом можно только данные вывести в браузер(что я собственно и описал выше).
А как заставить arduino + wifi отправлять именно http запросы?
Re: Wi-Fi модуль HLK-RM04 http запросы
Цитата:
Сообщение от
FDV
Может вы имели в виду serial.Print().
Если да, то таким образом можно только данные вывести в браузер(что я собственно и описал выше).
А как заставить arduino + wifi отправлять именно http запросы?
судя по описнию, это Wi-Fi - UART модуль, т.е. он эмулирует serial-порт через Wi-Fi, поэтому совет на счет serial.Print() правильный.
HTTP GET запрос на нем реализовать невозможно, берите нормальный Wi-Fi шилд, SPI и external interupt на micro есть, проблем не должно быть, хотя возможно в библиотеке для wi-fi шилда прийдется исправлять номера пинов.
Re: Wi-Fi модуль HLK-RM04 http запросы
Цитата:
Сообщение от
dimap
судя по описнию, это Wi-Fi - UART модуль, т.е. он эмулирует serial-порт через Wi-Fi, поэтому совет на счет serial.Print() правильный.
HTTP GET запрос на нем реализовать невозможно, берите нормальный Wi-Fi шилд, SPI и external interupt на micro есть, проблем не должно быть, хотя возможно в библиотеке для wi-fi шилда прийдется исправлять номера пинов.
Спасибо. А не подскажите в таком случае, как отправлять http запросы с нормального wifi шилда?
Re: Wi-Fi модуль HLK-RM04 http запросы
Цитата:
Сообщение от
FDV
Спасибо. А не подскажите в таком случае, как отправлять http запросы с нормального wifi шилда?
если возьмете стандартный wifi shield (http://arduino.cc/en/Main/ArduinoWiFiShield), то читайте здесь http://arduino.cc/en/Tutorial/WiFiWebClient. В описании на шилд написано какие контакты задействованы для коннекта с ардуиной, сопоставьте контакты UNO и Micro вперед соединять проводками.
Re: Wi-Fi модуль HLK-RM04 http запросы
GET и POST запросы можно посылать и с WiFi модулем, только для этого нужно написать PHP скрипт, выложить его где нибудь в интернет(есть бесплатные сервисы) и все запросы направлять через этот скрипт.
Для Ваших целей лучше использовать WiFi роутер с прошивкой CyberWrt, Ethernet Shield стоит столько же? но возможности у него ограничены
Re: Wi-Fi модуль HLK-RM04 http запросы
а php то зачем ??? тем более на внешнем сайте. можно поподробнее, мож я чего недопонял...
wifi shield (оригинальный) - это конечно дорого, под 4тр стоит.
вполне согласен, что связка wifi-роутер + ethernet shield будет дешевле - но этот набор уже весьма габаритный получается,
если взять ethernet-модель на чипе enc28j60, то еще дешевле.
только для enc28j60 очень кривые библиотеки и очень сложное программирование.
Re: Wi-Fi модуль HLK-RM04 http запросы
Цитата:
а php то зачем ??? тем более на внешнем сайте.
Потому что у человека уже есть модуль.
Цитата:
вполне согласен, что связка wifi-роутер + ethernet shield будет дешевле - но этот набор уже весьма габаритный получается
ethernet shield не нужен у роутера есть ethernet, WiFi и USB. Arduino подключаетет к USB роутера, настраиваете роутер в режиме WiFi клиента и отправляйте/принимайте все что хотите. У меня именно так и работает, к роутеру подключено только питание и Arduino.
В прошивке CyberWrt уже есть встроенный веб сервер и ser2net
Размер роутера 5x5 см
Re: Wi-Fi модуль HLK-RM04 http запросы
Возможно я не совсем подробно(правильно) описал задачу:
комплектующие arduino micro(можно и другой), wifi модуль HLK-RM04, температурный датчик.
Вот скетч, который формирует строку http запроса и кидает ее в порт:
Код:
#include <dht.h>
DHT sensor = DHT();
void setup()
{
Serial1.begin(115200);
sensor.attach(A3);
delay(1000);
}
void loop()
{
sensor.update();
int h = sensor.getHumidityInt();
int t = sensor.getTemperatureInt();
String msg = "GET http://192.168.1.1/arduino.php?t="+ String(t) + "&h="+String(h);
Serial1.println(msg);
delay(9000);
}
При ввода в браузер строки 192.168.1.20:3333 (адрес моего wifi модуля), строки отображаюися в браузере.
Имеется web-server apache (адрес 192.168.1.1), с mysql и php.
скрипт php который отлавливает get запросы и производит запись в mysql:
PHP код:
<?php
//адрес хоста
$dbhost = 'localhost';
$dbuser = 'test';
$dbpass = 'password';
$dbname = 'test';
// сохраняем IP на всякий случай
$client_ip = $_SERVER['REMOTE_ADDR'];
// получение значения переменной температура
$temp = $_GET["t"];
// получение значения влажность
$hum = $_GET["h"];
//устанавливаем подключение к MySQL
$connect = mysql_connect($dbhost, $dbuser, $dbpass);
// Выбираем базу данных
mysql_select_db ($dbname, $connect);
//Отправляем данные в таблицу
$sql = "INSERT INTO sensor_data VALUES (NOW(), '$temp', '$hum', '$client_ip')";
// закрываем соединение с базой
mysql_close($connect);
?>
Соответственно если скопировать одну из строк, которые выводятся в браузер и вставить ее в адресную строку, то скрипт корректно отрабатывает и запись добавляется в базу.
Весь вопрос заключается в том как заставить arduino+wifi отправлять запрос в web-server, как например при использовании интернет шилда:
Код:
#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4C, 0xFB };
byte ip[] = { 192, 168, 1, 30 };
//IP адрес сервера который будет собирать статистику
byte server[] = { 192, 168, 1, 20 };
EthernetClient client;
//Контакт к которому подключен датчик температуры и влажности
#define DHTPIN A0
// Вы бираем сенсор который используется у вас, у меня DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Ethernet.begin(mac, ip);
dht.begin();
// Для отладки включим отправку данных в COM порт
Serial.begin(9600);
}
void loop()
{
int h = dht.readHumidity();
int t = dht.readTemperature();
int l = analogRead(A0);
String msg = "GET /test.php?t="+ String(t) + "&h="+String(h);
// Для отладки включим отправку данных в COM порт
Serial.println(msg);
// Если это не требуется, то можно закомментировать
client.connect(server, 80);
client.println(msg);
//Ждем 2 сек.
delay (2000);
//потом отключаемся
client.stop();
//Данные будут отправляться каждые 10 сек, выше мы уже подождали 2 сек, подождем еще 8 сек.
delay (8000);
}
???
Или же такое в принципе через любой модуль wifi не возможно, или мой в частности??