Страница 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
nick7zmail писал(а):Почитай темку Arduino Mega Server...
Там большинство уже реализовано...и довольно неплохая отдельная вэб-морда)).
http://majordomo.smartliving.ru/forum/v ... =19&t=2347
http://hi-lab.ru/arduino-mega-server
И всё это на связке arduino+ethernetW5100 - просто впечатляет.
Спасибо за совет, натыкался на этот проект, читал. Но мне нужно на 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 писал(а): А вообще вопрос жутко интересный - как АМС отдает числа в МД я понял , а вот какой код надо написать в обратную сторону , чтобы сказать в микрофон ( а еще лучше в телефон ) - Алиса включи что либо -- команда ушла в АМС и по радио до сенсора и в итоге сработало реле. Две трети пути понятно - а дальше нет...
Я не это имел ввиду. Из браузера какую команду надо ардуинке послать, чтоб реле щелкнуло?