1

Тема: Xbee shield v5 программирование

Доброго времени суток.Никак не могу разобраться и найти простые примеры реализации допустим простого датчика температуры с использованием передачи данных по Xbee.
Собственно есть две платы freeduino 2009 и 2 платы Xbee shield v5  с модулями Xbee pro. Датчик температуры я прицеплю к одной фридуине без проблем.Не могли бы Вы опубликовать пример кода для передачи данных от одной фридуины на другую?
Спасибо.

2

Re: Xbee shield v5 программирование

Мне кажется стоит смотреть в сторону либы SoftwareSerial,
http://www.arduino.cc/en/Reference/SoftwareSerial

Есть еще либа специально для XBee, по линку куча примеров, http://code.google.com/p/xbee-arduino/

Re: Xbee shield v5 программирование

Для простейших задач никакие либы не нужны.
Все, что первый микроконтроллер выдаст в порт с помощью Serial.print, второй успешно прочтет из порта с помощью Serial.read и наоборот. Можно ориентироваться на типовой пример. Только джамперы на шилде нужно правильно по инструкции выставить.

4 (2011-01-15 01:53:39 отредактировано rxtstorm)

Re: Xbee shield v5 программирование

Правильно ли я понимаю:
Заливаем в первую ардуину (передатчик данных) следующий скетч (помимо кода приёма данных от датчика температуры)

// Создаём объект XBee в начале скетча
XBee xbee = XBee();

// Даём команду XBee на передачу данных со скоростью 9600
xbee.begin(9600);

// Создаём массив для хранения данных которые хотим передать
uint8_t payload[] = { 'H', 'i' };

// сюда вставим код получения данных с датчика температуры в массив? ()

//Определяем адрес дистанционного модуля XBee (это SH + SL (что это означает?))
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x403e0f30);

// Создаём TX запрос (т.е. запрос на передачу)
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));

// Send your request
//Отправляем запрос (имеется ввиду данные которые под которые создавали массив)
xbee.send(zbTx);



На принимающей стороне (вопрос вызывает только номер порта в ардуине на который принимается сигнал и нужно ли на принимающей стороне писать что либо для XBee модуля):


int outputPin = 13;                //здесь храним номер контакта (какой контакт указать?)
int val;                           //здесь будет храниться принятый символ

//далее код программы для обработки полученного символа (мигание диода или вывод на экран и т.д. по необходимости)



Прошу не ругаться.Я новичёк и если честно, то запутался.

5

Re: Xbee shield v5 программирование

Отзовитесь люди!!!!Так знает ли кто-нибудь как с шилдами работать и передавать данные с одной хвее на другую хвее!
Помогите пожалуйста,сам не могу разобраться!

Re: Xbee shield v5 программирование

rxtstorm пишет:

Отзовитесь люди!!!!Так знает ли кто-нибудь как с шилдами работать и передавать данные с одной хвее на другую хвее!
Помогите пожалуйста,сам не могу разобраться!

Да просто там все. Никаких библиотек не нужно. Я же говорю, берешь две Arduino, надеваешь на них XBee shield'ы. Если чипы XBee ты не перепрограммировал, они связываются друг с другом сами, и все что одна плата передает, вторая принимает.
К примеру, в первую плату зальем тестовый пример - когда принимается символ 'H' она зажигает 13 светодиод, когда принимается 'L', она его гасит:

int outputPin = 13;                //здесь храним номер контакта
int val;                           //здесь будет храниться принятый символ

void setup()
{
  Serial.begin(9600);              //установка порта на скорость 9600 бит/сек
  pinMode(outputPin, OUTPUT);      //устанавливаем 13 контакт в режим вывода
}

void loop()
{
  if (Serial.available()) {         //если есть принятый символ,
    val = Serial.read();            //  то читаем его и сохраняем в val
    if (val == 'H') {               //  если принят симовол 'H',...
      digitalWrite(outputPin, HIGH);//  то включаем светодиод
    } 
    if (val == 'L') {               //  если принят симовол 'L',
      digitalWrite(outputPin, LOW); //    то выключаем светодиод
    }
  }
}

Во вторую грузим совсем простой код - ждет секунду, шлет 'H', ждет секунду, шлет 'L':

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  delay(1000);
  Serial.print('H', BYTE);
  delay(1000);
  Serial.print('L', BYTE);
}

Готово. Вторая шлет в порт 'H', он по радио передается на первую, первая его получает, зажигает светодиод. И в таком духе.
Еще раз повторяю - работа через XBee - это просто работа с последовательным портом.
Хитрости начинаются, если нужно давать управляющие команды самому XBee модулю - тут может и библиотека покажется необходимой, хотя все-равно не обязательной, ведь модулю через тот же самый порт команды даются.

7

Re: Xbee shield v5 программирование

Спасибо Вам мил человек!Только сейчас дошли руки до платы.Буду пробовать!

8

Re: Xbee shield v5 программирование

Добрый день. А если параллельно будут работать несколько устройств xBee независимо друг от друга (пример: соревнования), не будут ли они мешать друг другу?

9

Re: Xbee shield v5 программирование

Сам же отвечаю на свой вопрос.Поборол ХВее и для всех выкладываю проги и описание.Может поможет кому...


Передача команд по XBEE.

Имеем:
1.Freeduino 2009 2 шт.
2.XBee 2 шт.
3.XBee shield 2 шт.
4.Кабель УСБ 1 шт.
5.Питание для Фридуины в виде 8 батареек АА.
6.Светодиоды разных цветов 2шт. + токоограничивающие резисторы к ним.
7.Провода.

Про настройку ХВЕЕ очень хорошо рассказано тут:

http://wiki.amperka.ru/%D0%B2%D0%B8%D0% … 0%B7%D1%8C

Там же много хороших уроков.

Логика такова-одна фридуина подключена к компу и читает значения из СОМ порта компа.Другая питается от батареек и обособлена от компа.Команды между Фридуинами передаются по ХВее.
Если ввести 1, то загорится светодиод  1 на удалённой (питающейся от батареек) плате.Если нажать 0 то загорится светодиод 2 на удалённой плате.Если ввести любой символ, отличный от 0 и 1, то оба светодиода моргнут 4 раза.

Программы.
Плата передатчик:
-----------------------------------------------------------------------------------------
void setup()
{
  Serial.begin(9600);//Создаём подключение на скорости 9600
}

void loop()
{
  while (Serial.available() == 0);//ждём сигнала с порта
  int val = Serial.read();//создаем переменную типа int в которую
  // пихаем полученное из порта значение
  Serial.print(val,DEC); //пуляем переменную как десятичное
  //число в порт
  Serial.flush();//Очищает очередь данных.
}
------------------------------------------------------------------------------------------

Плата приёмник с диодами:
------------------------------------------------------------------------------------------

int warning = 7;// светодиод "аварийный" на порте 7
int normal = 5;// светодиод "нормальный" на порте 5
void setup()
{
  Serial.begin(9600);//стартуем подключение на скоросте 9600
  pinMode (warning, OUTPUT);// порт 7 как выход
  pinMode (normal, OUTPUT);// порт 5 как выход
}
void loop ()
{
  while (Serial.available() == 0);//ждём сигнала от первой дуины
  int var = Serial.read() - '0';//читаем значение как простое число(десятичное)
  if (var == 1)//если это 1 то...
{
    digitalWrite(warning,HIGH); // ...зажигаем "аварийный" диод
    digitalWrite(normal,LOW);// тушим "нормальный" диод
}
  else if (var == 0) // если это 0 то...
{
    digitalWrite(normal,HIGH);//...зажигаем "нормальный" диод
    digitalWrite(warning,LOW);// тушим "аварийный" диод
}
  else // ну а если ни то, ни другое, а что либо ещё (например 2)
  {
    digitalWrite(warning,HIGH);//зажигаем "аварийный" диод
    digitalWrite(normal,HIGH);//зажигаем "нормальный" диод
    delay(200);// пауза
    digitalWrite(warning,LOW);//тушим "аварийный" диод
    digitalWrite(normal,LOW);//тушим "нормальный" диод
    delay(200);// пауза
    digitalWrite(warning,HIGH);
    digitalWrite(normal,HIGH);
    delay(200);
    digitalWrite(warning,LOW);
    digitalWrite(normal,LOW);
    delay(200);
    digitalWrite(warning,HIGH);
    digitalWrite(normal,HIGH);
    delay(200);
    digitalWrite(warning,LOW);
    digitalWrite(normal,LOW);
    delay(200);
    digitalWrite(warning,HIGH);
    digitalWrite(normal,HIGH);
    delay(200);
    digitalWrite(warning,LOW);
    digitalWrite(normal,LOW);
    delay(200);
   Serial.flush();//Очищает очередь данных
  }
}



Проги не оптимизировал.Может показаться по детски,но меня пока устраивает.

10

Re: Xbee shield v5 программирование

Вопросик модераторам.А может быть создать темку в шапке с ответами на такие вопросы?Ну типа расширенный FAQ.