Сеть беспроводных устройств на Arduino

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Сеть беспроводных устройств на Arduino

Сообщение sergejey » Ср июн 05, 2013 9:44 am

ser009 писал(а):У меня 5 шт лежит + 5 мини артуино под них. Видел адаптер USB под эти модули
а что за USB-адаптеры? я скорее буду делать ethernet-шлюз, но всё равно интересно.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Сеть беспроводных устройств на Arduino

Сообщение ser009 » Ср июн 05, 2013 11:01 am

Вот.
http://www.aliexpress.com/item/NRF24L01 ... 87945.html
NRF24L01 USB модуль
Я видел и другой модификации
Vadymkyr
Сообщения: 125
Зарегистрирован: Ср дек 26, 2012 8:33 pm
Откуда: Севастополь
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Сеть беспроводных устройств на Arduino

Сообщение Vadymkyr » Ср июн 05, 2013 12:19 pm

вот еще интересный комплект
RF-2410U RF-2400x5 2.4G RF Module Kit
и вот статья по их использованию Использование радио модулей RF-2400 от Inhaos
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Сеть беспроводных устройств на Arduino

Сообщение sergejey » Ср июн 05, 2013 1:26 pm

Смущает, что многие жалуются на дальность работы 2.4GHz модулей, а так же помехи от WiFi. Никто не сталкивался? Всё-таки, если частота по-меньше, то с проходимостью сигнала проще, нет?

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Vadymkyr
Сообщения: 125
Зарегистрирован: Ср дек 26, 2012 8:33 pm
Откуда: Севастополь
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Сеть беспроводных устройств на Arduino

Сообщение Vadymkyr » Ср июн 05, 2013 2:24 pm

Если будет совсем плохо, думаю такой вариант поможет 2.4G NRF24L01+ Wireless Transceiver Module + SMA Antenna, но мне кажется, в пределах квартиры проблем возникнуть не должно.
У себя дома для всем приемникам и передатчикам (433) напаял антенны 1/2 волны и ни каких проблем. Для меня главный минус в них, что может передавать одновременно только один передатчик.
arturmon
Сообщения: 155
Зарегистрирован: Сб июл 07, 2012 11:42 pm
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Сеть беспроводных устройств на Arduino

Сообщение arturmon » Чт июн 06, 2013 7:21 am

по моему самое интересное это mirf.
http://habrahabr.ru/post/171613/
второй пост, про дальность этих радио модулей.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Сеть беспроводных устройств на Arduino

Сообщение sergejey » Вт июн 11, 2013 12:29 pm

Добавил в конце статьи два готовых скетча -- один для передатчика с подключенным DS18B20 (температура) и DHT11 (влажность); второй -- для приёмника с ethernet-shield-ом. Тестирую дома эту связку -- пока вроде работает.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Сеть беспроводных устройств на Arduino

Сообщение sergejey » Ср авг 14, 2013 5:29 pm

В этой ветке добавил скетч ethernet-передатчика команд в эфир: http://smartliving.ru/forum/viewtopic.php?f=8&t=654

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
elik745i
Сообщения: 17
Зарегистрирован: Сб окт 26, 2013 8:39 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Сеть беспроводных устройств на Arduino

Сообщение elik745i » Вт окт 29, 2013 1:15 am

Ребят, не пашет, пытаюсь вывести данные на сцену, вот код метода:
$old_temp=$this->getProperty("temp");
$t=round($params['d']*2)/2;
$this->setProperty("temp",$t);
if ($t>$old_temp) {
$d=1;
} elseif ($t<$old_temp) {
$d=-1;
} else {
$d=0;
}
$this->setProperty("direction",$d);
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("H:i",time()));

что не так?
elik745i
Сообщения: 17
Зарегистрирован: Сб окт 26, 2013 8:39 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Сеть беспроводных устройств на Arduino

Сообщение elik745i » Сб ноя 02, 2013 4:12 am

sergejey писал(а):Добавил в конце статьи два готовых скетча -- один для передатчика с подключенным DS18B20 (температура) и DHT11 (влажность); второй -- для приёмника с ethernet-shield-ом. Тестирую дома эту связку -- пока вроде работает.
У меня не заработали, вот мой вариант:

Код: Выделить всё

#include <VirtualWire.h>
#include <EasyTransferVirtualWire.h>
#include <EEPROM.h> // эта библиотека нужна для работы с энерго-независимой памятью
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN A0
const int led_pin = 13;
const int transmit_pin = A1;
unsigned int unique_device_id = 0;
unsigned int count = 1;
int predefined_device_id=51554;
int predefined_destination_id=29249;
int SensorReadDelay=0.5;   //Delay between sensor read [Sec]
//create object
EasyTransferVirtualWire ET; 

struct SEND_DATA_STRUCTURE{
  //наша структура данны. она должна быть определена одинаково на приёмнике и передатчике
  //кроме того, размер структуры не должен превышать 26 байт (ограничение VirtualWire)
  unsigned int device_id;
  unsigned int destination_id;    
  unsigned int packet_id;
  byte command;
  unsigned int data;
};

//переменная с данными нашей структуры
SEND_DATA_STRUCTURE mydata;

//ниже пару функций для записи данных типа unsigned int в EEPROM
void EEPROMWriteInt(int p_address, unsigned int p_value)
      {
      byte lowByte = ((p_value >> 0) & 0xFF);
      byte highByte = ((p_value >> 8) & 0xFF);

      EEPROM.write(p_address, lowByte);
      EEPROM.write(p_address + 1, highByte);
      }

unsigned int EEPROMReadInt(int p_address)
      {
      byte lowByte = EEPROM.read(p_address);
      byte highByte = EEPROM.read(p_address + 1);

      return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
      }

void humidityRead(void) {
  Serial.println("\n");
  int chk = DHT11.read(DHT11PIN);
  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");
  Serial.println(DHT11.humidity);
  
  mydata.device_id = unique_device_id;
  mydata.destination_id = predefined_destination_id;
  mydata.packet_id = random(65535);
  mydata.command = 1;    //Humidity
  mydata.data = DHT11.humidity;
  
  

  digitalWrite(led_pin, HIGH); // включаем светодиод для отображения процесса передачи
  Serial.print("Transmitting packet ");   
  Serial.print(mydata.packet_id); 
  Serial.print(" device id ");   
  Serial.print(mydata.device_id);   
  Serial.print(" data: "); 
  Serial.print(mydata.data);
  Serial.print(" ... "); 
  ET.sendData(); // отправка данных
  
  digitalWrite(led_pin, LOW);
  Serial.println("DONE");
}

void temperatureRead(void) {
   
  Serial.println("\n");
  int chk = DHT11.read(DHT11PIN);
  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }
  
  Serial.print("Temperature (oC): ");
  Serial.println(DHT11.temperature);
  
  mydata.device_id = unique_device_id;
  mydata.destination_id = predefined_destination_id;
  mydata.packet_id = random(65535);
  mydata.command = 2;    //Temperature
  mydata.data = DHT11.temperature;
  
  

  digitalWrite(led_pin, HIGH); // включаем светодиод для отображения процесса передачи
  Serial.print("Transmitting packet ");   
  Serial.print(mydata.packet_id); 
  Serial.print(" device id ");   
  Serial.print(mydata.device_id);   
  Serial.print(" data: "); 
  Serial.print(mydata.data);
  Serial.print(" ... "); 
  ET.sendData(); // отправка данных
  
  digitalWrite(led_pin, LOW);
  Serial.println("DONE");
}


  
void setup()
{
  // блок инициализации
  pinMode(led_pin, OUTPUT);

  ET.begin(details(mydata));
  vw_set_tx_pin(transmit_pin); //установка пина, к которому подключен data-вход передатчика
  vw_setup(2000);        //скорость передачи
  Serial.begin(9600);
  randomSeed(analogRead(0));


  // Читаем/записываем Device ID
  Serial.print("Setting Device ID... ");
 EEPROMWriteInt(0, predefined_device_id); 
  unique_device_id=EEPROMReadInt(0);
  if (unique_device_id<10000 || unique_device_id>60000) {
   Serial.print("N/A, updating... "); 
   unique_device_id=random(10000, 60000);
   EEPROMWriteInt(0, unique_device_id);
  }
  Serial.println(unique_device_id);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();

}

void loop()
{
humidityRead();
  delay(SensorReadDelay*1000);
temperatureRead(); 
  delay(SensorReadDelay*1000);
}
и для ресивера:

Код: Выделить всё

#include <VirtualWire.h>
#include <EasyTransferVirtualWire.h>
#include <EEPROM.h> //Needed to access the eeprom read write functions
//#include <Ethernet.h>
#include <SPI.h>

const int led_pin = 13;
const int receive_pin = A0;
unsigned int unique_device_id = 0;
int predefined_device_id =29249; 
//create object
EasyTransferVirtualWire ET; 
char buf[120];
/*
byte mac[] = { 0x00, 0x2A, 0xB6, 0x14, 0x38, 0xAC };
IPAddress server(192,168,0,17);
//IPAddress ip(192, 168, 0, 72);
EthernetClient client;

int ethernetAvailable=0;
unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
boolean lastConnected = false;                 // state of the connection last time through the main loop
*/

struct SEND_DATA_STRUCTURE{
  //put your variable definitions here for the data you want to send
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  //Struct can'e be bigger then 26 bytes for VirtualWire version
  unsigned int device_id;
  unsigned int destination_id;  
  unsigned int packet_id;
  byte command;
  int data;
};

//give a name to the group of data
SEND_DATA_STRUCTURE mydata;

//This function will write a 2 byte integer to the eeprom at the specified address and address + 1
void EEPROMWriteInt(int p_address, unsigned int p_value)
      {
      byte lowByte = ((p_value >> 0) & 0xFF);
      byte highByte = ((p_value >> 8) & 0xFF);

      EEPROM.write(p_address, lowByte);
      EEPROM.write(p_address + 1, highByte);
      }

//This function will read a 2 byte integer from the eeprom at the specified address and address + 1
unsigned int EEPROMReadInt(int p_address)
      {
      byte lowByte = EEPROM.read(p_address);
      byte highByte = EEPROM.read(p_address + 1);

      return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
      }
/*
void sendHTTPRequest() {
  Serial.println(buf);   
  if (ethernetAvailable==1) {
   if (client.connected()) {
     client.stop();
   }
   if (client.connect(server, 80)) {
     Serial.println("connected");
     // Make a HTTP request:
     client.println(buf);
     client.println("User-Agent: arduino-ethernet");     
     client.println("Connection: close");     
     client.println();
     lastConnectionTime = millis();     
   } 
   else {
    Serial.println("connection failed");
    Serial.println("disconnecting.");    
    client.stop();
   } 
  }
}
*/

void setup()
{
    pinMode(led_pin, OUTPUT);
    Serial.begin(9600); // Debugging only
/*
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet");
    ethernetAvailable=0;
  } else {
   ethernetAvailable=1;
   delay(1000);
   Serial.print("My IP address: ");
   Serial.println(Ethernet.localIP());   
  }
*/
    ET.begin(details(mydata));
    // Initialise the IO and ISR
    vw_set_rx_pin(receive_pin);
    vw_setup(2000);      // Bits per sec
    vw_rx_start();       // Start the receiver PLL running

  // Device ID
  Serial.print("Setting Device ID... "); 
  EEPROMWriteInt(0, predefined_device_id);
  unique_device_id=EEPROMReadInt(0);
  if (unique_device_id<10000 || unique_device_id>60000) {
   Serial.print("N/A, updating... "); 
   unique_device_id=random(10000, 60000);
   EEPROMWriteInt(0, unique_device_id);
  }
  Serial.println(unique_device_id);

}

void loop()
{
/*
    if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }  
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  } 
*/
    if(ET.receiveData())
    {
        digitalWrite(led_pin, HIGH);
        Serial.print("Got: ");
        Serial.print("Device ID: ");
        Serial.print(mydata.device_id);
        Serial.print(" Destination ID: ");
        Serial.print(mydata.destination_id);        
        Serial.print(" Packet ID: ");
        Serial.print(mydata.packet_id);
        Serial.print(" Command: ");
        Serial.print(mydata.command);
        Serial.print(" Data: ");
        Serial.print(mydata.data);
        Serial.println();
        digitalWrite(led_pin, LOW);
        sprintf(buf, "GET /objects/?script=easyRF&did=%u&dest=%u&pid=%u&c=%u&d=%i HTTP/1.0", (int)mydata.device_id, (int)mydata.destination_id, (int)mydata.packet_id, (int)mydata.command, (int)mydata.data);
        Serial.println(buf); // выводим строку со ссылкой для HTTP-запроса (здесь может быть добавлено использование ethernet-shield-а
        //sendHTTPRequest();
        Serial.println();        
    }

   //lastConnected = client.connected(); 

}
Ответить