Страница 1 из 2
Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 12:49 pm
AlexF5
Добрый день! Пожалуйста, подскажите, как создать связку в сабже?
Я уже измучался! Задача:
Есть датчик давления и температуры, есть релюха. Нужно: с вебки управлять релюшкой и получать данные с датчика.
Получать и отправлять через ethernet . Получать данные MDM успешно получилось, но управлять релюшкой - ни в какую! И найти на форуме как то не совсем получается. Если я правильно понимаю, то для передачи на MDM данных - необходимо объявить ethernet shield - клиентом. А если получать, то сервером. А совместить как? Буду очень благодарен! Сильно не пинайте...только учусь)
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 1:18 pm
nick7zmail
Почитай темку Arduino Mega Server...
Там большинство уже реализовано...и довольно неплохая отдельная вэб-морда)).
http://majordomo.smartliving.ru/forum/v ... =19&t=2347
http://hi-lab.ru/arduino-mega-server
И всё это на связке arduino+ethernetW5100 - просто впечатляет.
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 1:36 pm
AlexF5
Спасибо за совет, натыкался на этот проект, читал. Но мне нужно на Uno, а в некоторых местах и на nano...а у них с памятью плохо)
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 1:42 pm
serghei
Посмотри ветку "power monitor" . В конце темы есть исправленный скетч. Влезает на Нано и уно. Можешь вырезать измерение токов и вставить в свой проект только процедуру запросов. А вот как передавать команды обратно из МД на АМС - самого интересует.
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 2:08 pm
AlexF5
serghei писал(а):Посмотри ветку "power monitor" . В конце темы есть исправленный скетч. Влезает на Нано и уно. Можешь вырезать измерение токов и вставить в свой проект только процедуру запросов. А вот как передавать команды обратно из МД на АМС - самого интересует.
Так передавать показания счетчиков на МД:
#include <Ethernet.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_GFX.h>
#include <SPI.h>
// MAC-адрес нашего устройства
byte mac[] = { 0x00, 0x2A, 0xF6, 0x12, 0x68, 0xFC };
// ip-адрес устройства
byte ip[] = { 192, 168, 0, 73 };
// ip-адрес удалённого сервера
byte server[] = { 192, 168, 0, 243 }; // измените на свой
//Adafruit_PCD8544 display = Adafruit_PCD8544(7, 8, 9, 10, 11);
Adafruit_BMP085 bmp;
int cycle_counter=0;
int releState=0;
int relePin = 6;
int old_garage=0;
int old_pressure1=0;
int press1=0;
int old_entry=0;
int incomingInt = 0;
int old_movement_1=0;
int old_movement_2=0;
int current_temp1=0;
int old_temperature1=0;
int old_button_1=0;
int old_button_2=0;
char buf[80];
EthernetClient rclient; // 80-порт.
void sendHTTPRequest() {
Serial.println(buf);
if (rclient.connect(server,80)) {
Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.0.17");
rclient.println();
delay(2000);
rclient.stop();
} else {
Serial.println("FAILED");
}
}
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(115200);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
// Скорость консольного порта 115200 (пригодится для отладки)
pinMode(relePin, OUTPUT);
}
void loop()
{
int valid_sensor=0;
delay(100); // задержка в 0.1 сек.
cycle_counter++;
if (cycle_counter>600) {
cycle_counter=0;
}
// TEMP SENSOR 1
float current_temp1=0;
Serial.println("Temper");
current_temp1=bmp.readTemperature(); // получаем температуру
Serial.println(current_temp1);
if ((old_temperature1!=(int)current_temp1)) {
int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorRoom&op=m&m=tempChanged&t=%02d.%02d HTTP/1.0", (int)current_temp1, abs(temp1));
sendHTTPRequest();
}
old_temperature1=(int)current_temp1;
float current_press1=0;
Serial.println("Press");
current_press1=(bmp.readPressure())/133.1; // получаем температуру
Serial.println(current_press1);
if ((old_pressure1!=(int)current_press1)) {
//int press1 = (current_press1 - (int)current_press1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=pressRoom&op=m&m=pressChanged&t=%03d HTTP/1.0", (int)current_press1);
sendHTTPRequest();
}
old_pressure1=(int)current_press1;
}
Это реализация передачи. А вот как слушать ардуиной информацию от МД? Может быть если поднять веб-сервер с кнопками и МД будет их проставлять..Но это какое то извращение ИМХО.
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 2:43 pm
nick7zmail
AlexF5 писал(а):
Это реализация передачи. А вот как слушать ардуиной информацию от МД? Может быть если поднять веб-сервер с кнопками и МД будет их проставлять..Но это какое то извращение ИМХО.
Для "слушанья" можно кусок кода с AMS как раз стырить))
Только вместо команд которые там выводятся - построить запрос типа - arduino.ip/?cmd=some_data1&some_data2....ну или как там этот код запросов пишется...а из мд - делать запросы, к примеру ежеменутно (либо принудительно, если нужно релюшкой щелкать) через getUrl(). Some_data -как раз параметры, которые передавать надо....
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 2:56 pm
serghei
У меня сейчас получилось передать команду из АМС на удаленный сенсор и щелкать релюшкой (правда по радио) + отображать состояние на веб странице. А вот как эту процедуру воткнуть в МД - не представляю. Да и писать код надо на PHP....
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 3:59 pm
nick7zmail
serghei писал(а):У меня сейчас получилось передать команду из АМС на удаленный сенсор и щелкать релюшкой (правда по радио) + отображать состояние на веб странице. А вот как эту процедуру воткнуть в МД - не представляю. Да и писать код надо на PHP....
Какой ссылкой "щелкается" релюшка?
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 5:14 pm
serghei
АМС сенсору передает команду SET_RELAY. Должны быть две взаимные части на АМС и сенсоре. Все передается через NRF24 по радио. Ты запустил эту сеть? Полный код для пяти сенсоров Алекс высылает по запросу на почту. У меня завелось с пол оборота и в итоге получил картинку как он выкладывал. Конкретно команда выглядит наверное так
Код: Выделить всё
void makePacketGetRelay() {makePacket(&sendGetRelay, TYPE_REQUEST, GET_RELAY, 255, "", "");}
void makePacketSetRelay() {makePacket(&sendSetRelay, TYPE_COMMAND, SET_RELAY, 255, "", String(sendSetRelay.action));}
Тут специфический случай - В МД все по другому....
А вообще вопрос жутко интересный - как АМС отдает числа в МД я понял , а вот какой код надо написать в обратную сторону , чтобы сказать в микрофон ( а еще лучше в телефон ) - Алиса включи что либо -- команда ушла в АМС и по радио до сенсора и в итоге сработало реле. Две трети пути понятно - а дальше нет...
Re: Arduino+EthernetW5100+MDM
Добавлено: Ср сен 14, 2016 5:49 pm
nick7zmail
serghei писал(а):
А вообще вопрос жутко интересный - как АМС отдает числа в МД я понял , а вот какой код надо написать в обратную сторону , чтобы сказать в микрофон ( а еще лучше в телефон ) - Алиса включи что либо -- команда ушла в АМС и по радио до сенсора и в итоге сработало реле. Две трети пути понятно - а дальше нет...
Я не это имел ввиду. Из браузера какую команду надо ардуинке послать, чтоб реле щелкнуло?