а что за USB-адаптеры? я скорее буду делать ethernet-шлюз, но всё равно интересно.ser009 писал(а):У меня 5 шт лежит + 5 мини артуино под них. Видел адаптер USB под эти модули
Сеть беспроводных устройств на Arduino
Модератор: immortal
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Сеть беспроводных устройств на Arduino
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: Сеть беспроводных устройств на Arduino
Вот.
http://www.aliexpress.com/item/NRF24L01 ... 87945.html
NRF24L01 USB модуль
Я видел и другой модификации
http://www.aliexpress.com/item/NRF24L01 ... 87945.html
NRF24L01 USB модуль
Я видел и другой модификации
-
- Сообщения: 125
- Зарегистрирован: Ср дек 26, 2012 8:33 pm
- Откуда: Севастополь
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Сеть беспроводных устройств на Arduino
вот еще интересный комплект
RF-2410U RF-2400x5 2.4G RF Module Kit
и вот статья по их использованию Использование радио модулей RF-2400 от Inhaos
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
Смущает, что многие жалуются на дальность работы 2.4GHz модулей, а так же помехи от WiFi. Никто не сталкивался? Всё-таки, если частота по-меньше, то с проходимостью сигнала проще, нет?
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 125
- Зарегистрирован: Ср дек 26, 2012 8:33 pm
- Откуда: Севастополь
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Сеть беспроводных устройств на Arduino
Если будет совсем плохо, думаю такой вариант поможет 2.4G NRF24L01+ Wireless Transceiver Module + SMA Antenna, но мне кажется, в пределах квартиры проблем возникнуть не должно.
У себя дома для всем приемникам и передатчикам (433) напаял антенны 1/2 волны и ни каких проблем. Для меня главный минус в них, что может передавать одновременно только один передатчик.
У себя дома для всем приемникам и передатчикам (433) напаял антенны 1/2 волны и ни каких проблем. Для меня главный минус в них, что может передавать одновременно только один передатчик.
-
- Сообщения: 155
- Зарегистрирован: Сб июл 07, 2012 11:42 pm
- Благодарил (а): 3 раза
- Поблагодарили: 3 раза
Re: Сеть беспроводных устройств на Arduino
по моему самое интересное это mirf.
http://habrahabr.ru/post/171613/
второй пост, про дальность этих радио модулей.
http://habrahabr.ru/post/171613/
второй пост, про дальность этих радио модулей.
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Сеть беспроводных устройств на Arduino
Добавил в конце статьи два готовых скетча -- один для передатчика с подключенным DS18B20 (температура) и DHT11 (влажность); второй -- для приёмника с ethernet-shield-ом. Тестирую дома эту связку -- пока вроде работает.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Сеть беспроводных устройств на Arduino
В этой ветке добавил скетч ethernet-передатчика команд в эфир: http://smartliving.ru/forum/viewtopic.php?f=8&t=654
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Re: Сеть беспроводных устройств на Arduino
Ребят, не пашет, пытаюсь вывести данные на сцену, вот код метода:
$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()));
что не так?
$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()));
что не так?
Re: Сеть беспроводных устройств на Arduino
У меня не заработали, вот мой вариант: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();
}