Перепрошивка блоков через RF-модуль nRF24L01+

mihart
Offline
Зарегистрирован: 14.05.2013

Добрый день!

Создаю автономный модуль: связка из ардуино (atmega328), RF-модуля nRF24L01+ и одного датчика.

Работает так как нужно, все в порядке.

Но сейчас подумал о том, что в дальнейшем мне может понадобиться ардуино перепрошить, а учитывая, что блок будет находиться в труднодоступном месте, сделать это будет непросто. Есть какая-нибудь возможность сделать это по воздуху?

Может быть еще один микроконтроллер попроще добавить, который будет на себя брать задачу перепрошивки?

axill
Offline
Зарегистрирован: 05.09.2011

как один из вариантов - поставить второй МК (или использовать nrf24le1 со встроенным МК) и организовать RS232 шлюз через сеть NRF24, на втором конце сделать такой же адаптер на МК который подключать к компьютеру

далее прошивать как обычную ардуину. Только RX-TX коммуникация будет идти по пути:

ПК -> USB -> урдуинка с модулем NRF24 -> воздух -> специальный МК для организации шлюза с модулем NRF24 -> прошиваемая ардуинка через RX-TX

если не ошибаюсь, примерно в такой логике работает Xbee - можно даже тупо сделать свои модули XBee на чипе NRF24 и делать коммуникацию и прошивку через них так же как через такие же модули но с другим протоколом

mihart
Offline
Зарегистрирован: 14.05.2013

Спасибо, буду подбирать самую недорогую микросхему с RX-TX.

Кстати, раз уж речь прошла про Xbee, в инете сложно найти инфу по ним, везде только продают)

Xbee - это протокол? Интерфейс? Вид разъема?

axill
Offline
Зарегистрирован: 05.09.2011

mihart пишет:

Спасибо, буду подбирать самую недорогую микросхему с RX-TX.

Кстати, раз уж речь прошла про Xbee, в инете сложно найти инфу по ним, везде только продают)

Xbee - это протокол? Интерфейс? Вид разъема?

как я понимаю - это формфактор, т.е. стандартный разьем с рядом пинов стандартного назначения (по больше части это пины с питанием и как раз RX TX)

фишка в том, что ты пишешь для ардуины код, который не зависит от того через какой протокол или чип идет реальная передача - есть Xbee для блютуфа, есть для Zigbee, wifi и т.д., даже странно, что нет nrf24l01, наверно все таки xbee это надстройка которая убивает прелесть от цены nrf24l01+

насчет чипа бери atmega8 - их десяток на алиэкспресс стоит 9 баксов всего. сейчас коньюктура рынка такая, что что-то совсем дешовое брать дорого - сэкономишь 10-20-50 центов, а потом потратишь кучу времени, чтобы на ограниченных ресурсах что-то сделать

axill
Offline
Зарегистрирован: 05.09.2011

кстати тоже сейчас делаю умные устрояства для дома на базе nrf24. тоже думал про прошивку

можно было бы объединить усилия.

да, забыл - для прошивки еще кроме RX TX надо цеплять Reset, чтобы удаленно можно было сбрасывать ту ардуинку, которую надо програмировать

mihart
Offline
Зарегистрирован: 14.05.2013

Сам остановился на Atmega8 и по тем же причинам. Что-либо попроще привезти стоит чуть ли не дороже ее.

объединить усилия было бы неплохо. Опыта у меня только маловато, если это не проблема - можно и совместить. Главное, чтобы концепции умных устройств совпали. Мне помимо функционала еще важен размер+цена.

Моя концепция умных устройств: это дешевые, компактные устройства везде, вплоть до того, что оно будет в каждой розетке.

Сначала я смотрел на плату http://jt5.ru/arduino/colibri/, но для такого подхода цена кусается.

Поэтому решил брать отдельно контроллер Atmega328, отдельно RF-чип, минимум обвязки, датчик или два и выход на управление. Так как перепрошивать без еще одного контроллера не получится, добавляем еще atmega8. Под это разрабатываю двустороннюю компактную плату и загружаю Arduino-бутлоадер.

Цена на мой взгляд должна укладываться рублей в 300.

 

Это мне позволяет выполнить следующие сценарии:

1. Автономный датчик протечек, температуры, качества воздуха и прочего. Стандартно

2. Автономный модуль в каждую розетку с датчиком тока, температурным датчиком и управлением включения розетки от твердотельного реле (пока ничего безопаснее не придумал).

Такой подход к устройствам устроит?

Сейчас жду nrf24, буду пробовать. Пока с радиопередачей не связывался.

ales2k
Offline
Зарегистрирован: 25.02.2013

Есть подобная задумка

http://arduino.ru/forum/apparatnye-voprosy/zalivka-sketcha-cherez-bluetooth

но сейчас думаю, что более правильно делать по радио не ком порт, а сразу SPI чтоб можно было просто прошить скетч без бутлоадера.

В любом случае сейчас жду из Китая модули  nrf24l01+.

P/S/ Последние две поставки оказались очень разными по дальности и устойчивости работы. Первая пара свободно прошибает 2 стены, вторая только по комнате. Жду третью.

axill
Offline
Зарегистрирован: 05.09.2011

mihart пишет:

объединить усилия было бы неплохо. Опыта у меня только маловато, если это не проблема - можно и совместить. Главное, чтобы концепции умных устройств совпали. Мне помимо функционала еще важен размер+цена.

у меня опыта тоже не много

Цитата:

Моя концепция умных устройств: это дешевые, компактные устройства везде, вплоть до того, что оно будет в каждой розетке.

Сначала я смотрел на плату http://jt5.ru/arduino/colibri/, но для такого подхода цена кусается.

Поэтому решил брать отдельно контроллер Atmega328, отдельно RF-чип, минимум обвязки, датчик или два и выход на управление. Так как перепрошивать без еще одного контроллера не получится, добавляем еще atmega8. Под это разрабатываю двустороннюю компактную плату и загружаю Arduino-бутлоадер.

Цена на мой взгляд должна укладываться рублей в 300.

RF чип или модуль? я тоже думал про чип, но сейчас на али чип десятком стоит по 80 центов, а модуль можно взять за 90 - теряется смысл брать чип - нужно еще как минимум около десятка деталей, тот же кварц стоит десятком от 10 центов

а в целом у меня такие же задумки - можно на мой взгялд сделать "шасси" - типа ардуинки только заточенное именно под умный дом, где есть основной мк, радиомодуль, контроллер питания от батарейки или акб

Цитата:

Это мне позволяет выполнить следующие сценарии:

1. Автономный датчик протечек, температуры, качества воздуха и прочего. Стандартно

2. Автономный модуль в каждую розетку с датчиком тока, температурным датчиком и управлением включения розетки от твердотельного реле (пока ничего безопаснее не придумал).

Такой подход к устройствам устроит?

да именно так и думаю. правда с бутлоадером есть еще одна проблема - не работоспособность watchdog, а это сильно снижает надежность. я предлагаю в качестве среды разработки выбрать atmelstudio с надстройкой для ардуино, чтобы использовать теже библиотеки, но бутлоадер не использовать, обязательнос использовать watchdog

axill
Offline
Зарегистрирован: 05.09.2011

ales2k пишет:

Есть подобная задумка

http://arduino.ru/forum/apparatnye-voprosy/zalivka-sketcha-cherez-bluetooth

но сейчас думаю, что более правильно делать по радио не ком порт, а сразу SPI чтоб можно было просто прошить скетч без бутлоадера.

В любом случае сейчас жду из Китая модули  nrf24l01+.

P/S/ Последние две поставки оказались очень разными по дальности и устойчивости работы. Первая пара свободно прошибает 2 стены, вторая только по комнате. Жду третью.

соглашусь по причине ряда проблем, которые вызывает бутлоадер. Но такой подход может существенно усложнить разработку.

axill
Offline
Зарегистрирован: 05.09.2011

предлагаю обсуждение перенести в http://arduino.ru/forum/proekty/platforma-dlya-upravleniya-umnym-domom-n...

mihart
Offline
Зарегистрирован: 14.05.2013

То, что бутлоадер и watchdog не дружат я не знал, это плохо. Переходить на AtmelStudio планирую, но сначала хотел закончить устройство на arduino, чтобы оно было рабочим. Планирую делать так, потому что чистый С на микроконтроллерах еще не изучал, боюсь, что потрачу время и перегорю.

Выбор именно чипа связан не с ценой, а с габаритами и возможностью создать плату с выносной антенной. Да, модуль компактен, но это еще один этаж над платой, а в розетке места немного. Второй момент: меня гложут сомнения, что антенка в виде дорожки на плате пробъет из дырки в бетонной стене под розетки. Рассматриваю вариант выносной, которую спрячу под декоративную панель розетки.

mihart
Offline
Зарегистрирован: 14.05.2013

Согласен, следующие посты пишу там.

ales2k
Offline
Зарегистрирован: 25.02.2013

"с бутлоадером есть еще одна проблема - не работоспособность watchdog"  - Это где написано. У меня есть несколько решений где все это вместе работает.

axill
Offline
Зарегистрирован: 05.09.2011

ales2k пишет:

"с бутлоадером есть еще одна проблема - не работоспособность watchdog"  - Это где написано. У меня есть несколько решений где все это вместе работает.

поделитесь решением, я сам пробовал, искал в форумах - решения не нашел. возникает цикл перезапуска

вроде как существуют исправленные версии бутлоадера, но как я понял официальная версия с watchdog не работает

ales2k
Offline
Зарегистрирован: 25.02.2013
axill
Offline
Зарегистрирован: 05.09.2011

зачем там про фьюзы написано? это стандартный arduino UNO или своя плата на atmega328?

бутлоадер использован?

ales2k
Offline
Зарегистрирован: 25.02.2013

Фьюзы для снижения потребления и внутреннего кварца. В них же можно уменьшить время старта бутлоадера. 

Это своя плата - фотки наверху темы. Бутлоадер использован.

toc
Offline
Зарегистрирован: 09.02.2013

>> с бутлоадером есть еще одна проблема - не работоспособность watchdog

имею две ардуино нано. Одна 168 и одна 328.
С помощью ArduinoISP успешно прошил им optiboot из комплекта файлов Ардуино IDE 1,0,1. Только в boards.txt поправил. Теперь нет проблемы. И скетчи заливаются быстрее значительно.

axill
Offline
Зарегистрирован: 05.09.2011

ales2k пишет:

Фьюзы для снижения потребления и внутреннего кварца. В них же можно уменьшить время старта бутлоадера. 

Это своя плата - фотки наверху темы. Бутлоадер использован.

бутлоадер просто прошит или avr стартует с него после каждого ресета? это ключевое, если он не используется в старте, то проблемы с watchdog и не будет

фьюзами нельзя ускорить старт ардуиновского бутлоадера

фьюзами можно лишь сократить задержку самого avr перед передачей управления коду бутлоадера или программы, смотря что прописано

axill
Offline
Зарегистрирован: 05.09.2011

toc пишет:

>> с бутлоадером есть еще одна проблема - не работоспособность watchdog

имею две ардуино нано. Одна 168 и одна 328.
С помощью ArduinoISP успешно прошил им optiboot из комплекта файлов Ардуино IDE 1,0,1. Только в boards.txt поправил. Теперь нет проблемы. И скетчи заливаются быстрее значительно.

поясните что хотели сказать. мне не понятно. optiboot решает проблему с watchdog?

toc
Offline
Зарегистрирован: 09.02.2013

да!

ales2k
Offline
Зарегистрирован: 25.02.2013

бутлоадер просто прошит и avr стартует с него после каждого ресета

фьюзами конечно можно лишь сократить задержку самого avr

у меня работает именно optiboot,

со штатным расстался давно, так как память обычно на вес золота 

step962
Offline
Зарегистрирован: 23.05.2011

axill пишет:

мне не понятно. optiboot решает проблему с watchdog?

Там ларчик просто открывается - в бутлодырь введены инструкции отключения сторожевого таймера в случае индикации состояния "Программирование".

Ведь, в сущности, проблемы уотчдога, как таковой, нет, поскольку и причины и методы решения такого поведения микроконтроллера известны с незапамятных времен. Есть лишь необъяснимое нежелание отцов-основателей Arduino встроить выключатель (или "подавитель") в официальный загрузчик.

axill
Offline
Зарегистрирован: 05.09.2011

ясно, значит я был прав, когда написал про проблему с официальным загрузчиком. про решение проблемы в ряде не официальных я читал, только сам не проверял. буду знать, спасибо.

ales2k
Offline
Зарегистрирован: 25.02.2013

optiboot идет в составе штатной поставки ПО. Так что совсем уж неофициальным я его бы не называл.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Так посмотрите исходники бутлоадера, поправьте, да прошейте

axill
Offline
Зарегистрирован: 05.09.2011

kisoft пишет:
Так посмотрите исходники бутлоадера, поправьте, да прошейте

смотрел уже - ничего не понял, так как там почти один асемблер ) но это пока не важно, важно что есть решение для стородевого таймера, а код бутлоадера надо будет менять только если МК будет не из списка тех которые прописаны в коде бутлоадера

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Нет там ассемблера. Но есть прямое обращение к портам. Есть выключение watchdog, которое включается условной компиляции. В общем, было бы желание

axill
Offline
Зарегистрирован: 05.09.2011

kisoft пишет:
Нет там ассемблера. Но есть прямое обращение к портам. Есть выключение watchdog, которое включается условной компиляции. В общем, было бы желание

смотрите внимательнее - третья треть optiboot.c где собственно функции которые вызываются во второй трети файла из кода на Си (первая треть - определения)

void putch(char ch) {
#ifndef SOFT_UART
  while (!(UCSR0A & _BV(UDRE0)));
  UDR0 = ch;
#else
  __asm__ __volatile__ (
    "   com %[ch]\n" // ones complement, carry set
    "   sec\n"
    "1: brcc 2f\n"
    "   cbi %[uartPort],%[uartBit]\n"
    "   rjmp 3f\n"
    "2: sbi %[uartPort],%[uartBit]\n"
    "   nop\n"
    "3: rcall uartDelay\n"
    "   rcall uartDelay\n"
    "   lsr %[ch]\n"
    "   dec %[bitcnt]\n"
    "   brne 1b\n"
    :
    :
      [bitcnt] "d" (10),
      [ch] "r" (ch),
      [uartPort] "I" (_SFR_IO_ADDR(UART_PORT)),
      [uartBit] "I" (UART_TX_BIT)
    :
      "r25"
  );
#endif
}

но это не суть

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Это всего лишь работа с USB, и к watchdog не имеет отношения. Ок, не вопрос.

ales2k
Offline
Зарегистрирован: 25.02.2013

Собрал схему для удаленной прошивки Ардуино по сом порту и столкнулся с проблеммой:

avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
avrdude: stk500_cmd(): programmer is out of sync

Прошиваемая ардуинка ресетится, начинается заливка и сразу прекращается. Промучился день, решил упростить собрал тестовую схему без радиомодулей:

USB2COM -> (софт COM) Ардуино для заливки(скетч ниже)  (аппаратн COM) -> Прошиваемая Ардуино.

Все ардуины 328. Ресет в тесте завел напрямую с USB2COM прямо в прошиваемую Ардуину. Ошибка та же. Пробовал с буферами 32 байта и без. Все равно не работает - где собака зарылась не понятно. Заранее спасибо за помощь.

P/S/ Напрямую тестовая конечно прошивается - первое что проверил!

 

#include <SoftwareSerial.h>

SoftwareSerial mySerial(11, 10); // RX, TX
char b;

void setup()  
 {
 Serial.begin(57600);
 mySerial.begin(57600);
 }
 
void loop()
 {
   if (mySerial.available()){
      b=mySerial.read();
     Serial.write(b);}
//   delay(10);
   if (Serial.available()){
      b=Serial.read();
      mySerial.write(b);}
 }

 

 

ales2k
Offline
Зарегистрирован: 25.02.2013

Посмотрел анализатором

ales2k
Offline
Зарегистрирован: 25.02.2013

Нашел сегодня страничку http://www.faludi.com/itp_coursework/meshnetworking/XBee/XBee_program_Arduino_wireless.html

Попробую использовать.

dmw
Offline
Зарегистрирован: 24.03.2013

Есть вот такие вот штуки: NRF24L01 Wireless Shield SPI to IIC I2C TWI Interface

С помощю их можно прошивать по воздуху?

toc
Offline
Зарегистрирован: 09.02.2013

dmw, с помощью этой штуки можно подключить радиомодуль с SPI интерфейсом к микроконтроллеру или ардуине по I2C интерфейсу. Работать (!) радиомодуль будет если вы напишите/найдёте совместимую с I2C библиотеку. Файлик в описании этого товара не содержит такой библиотеки. Насколько я знаю, прошивать микроконтронтроллеры AVR и платы ардуино через I2C невозможно.

ales2k
Offline
Зарегистрирован: 25.02.2013

dmw ты их использовал? Если да - то поделись впечатлениями.

ales2k
Offline
Зарегистрирован: 25.02.2013

Я предполагаю с моими схемами проблема в следующем:

57600 это 1 байт каждые 138 микросекунд и задержка на ожидание ответа от прошиваемой 328р тоже находится гдето в этом порядке, а постановка в промежуток моей машинерии вносит доп задержку и мешает обмену.