Как связать платы Arduino Uno и Iskra JS через модуль связи nRF24L01+?

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем blackbars1408, 15 мар 2017.

  1. blackbars1408

    blackbars1408 Нерд

    Кто поможет?
     
  2. afiskon

    afiskon Нерд

    Про NRF24L01 и все тонкости работы с ними недавно писал. Про JS ничего не ведаю, уж извините.
     
    arkadyf нравится это.
  3. blackbars1408

    blackbars1408 Нерд

    спасибо. дальше сам разберусь
     
  4. Morgan

    Morgan Гик

    arkadyf нравится это.
  5. blackbars1408

    blackbars1408 Нерд

    А если передавать какую-либо информацию на Iskra JS с Arduino Uno, каким образом нужно обработать программу, чтобы данные, написанные на одном языке, понимались другой платой с другим языком?
     
  6. rkit

    rkit Гуру

    Что значит обработать? Надо просто написать программу. Данные есть данные.
     
  7. ИгорьК

    ИгорьК Гуру

    Здесь есть нюанс. В JS нет int float и массивы там другие. Поэтому чтобы соединить две системы по воздуху, надо передавать данные только в текстовом формате или побайтно.
    С учетом того, что в nrf передается указатель на начало и длина данных для передачи - прием чего либо внятного на другом конце требует определенных размышлений. float 3.14 отправить можно, и принять другом конце несколько байт, но сообразить из них пи обратно не удастся.
     
    Последнее редактирование: 17 мар 2017
    arkadyf нравится это.
  8. rkit

    rkit Гуру

    Данные всегда передаются побайтно. В JS как раз все числа - float'ы.
     
  9. ИгорьК

    ИгорьК Гуру

    Не спешите. Сказанное верно в целом но неприменимо к работе в данном случае. Дочитайте мой пост, я его не сразу дописал.
     
  10. rkit

    rkit Гуру

    Ну почему нет-то? Смотрим формат float'a и собираем число.
    Код (C++):
    union {
        float    fl;
        uint32_t dw;
    } f;
    int s = ( f.dw >> 31 ) ? -1 : 1;   /* Знак */
    int e = ( f.dw >> 23 ) & 0xFF;     /* Порядок */
    int m =                            /* Мантисса */
      e ?
        ( f.dw & 0x7FFFFF ) | 0x800000 :
        ( f.dw & 0x7FFFFF ) << 1;
    Ну если сложно, то текст, конечно.
     
    ИгорьК нравится это.
  11. ИгорьК

    ИгорьК Гуру

    Вы проверили, для Espruino это так?
     
  12. rkit

    rkit Гуру

    Для жс и надо будет писать преобразование в байты и из байтов. Там нельзя просто преобразовать указатель. Так что как напишете, так и будет.
     
  13. ИгорьК

    ИгорьК Гуру

    Ну в этом и вопрос ТС. Не уверен, правда, понимал ли он его сам :)
     
  14. rkit

    rkit Гуру

    Да вопрос как всегда в том, чтобы объяснить каким-то образом в одном ответе на форуме то, чему надо полгода учиться.
     
    ИгорьК и arkadyf нравится это.
  15. blackbars1408

    blackbars1408 Нерд

    Тогда скажите, где можно научиться)
    Главное в вопросе, как передавать и принимать, а вот что - уже без разницы. можно ведь настроить,
    чтобы так, чтобы на ведомом устройстве нужные функции запускались от определенного символа.
     
  16. rkit

    rkit Гуру

    Изучите досконально оба языка - всё будет понятно.
     
  17. kajsat

    kajsat Нуб

    Здравствуйте, у меня есть две платы IskraJS(http://wiki.amperka.ru/js:iskra_js– IskraJSна сайте амперки) и IskraJSmini(http://wiki.amperka.ru/продукты:iskra-js-mini– IskraJSminiна сайте амперки) и два модуля беспроводной связи NRF24l01+.

    Я подключил модули к платам напрямую, используя вспомогательную схему распиновки с сайтов выше и на сам модуль к доступным интерфейсам SPI(без контакта IRQ):

    MISO – MISO;

    MOSI – MOSI;

    SCK – SCK;

    CSN – CSN;

    CE- CE;

    Vcc – 3.3V;

    GND – GND.

    nrf24l01pinout11.JPG

    Пользовался инструкцией с сайта(http://www.espruino.com/NRF24L01P - описание по подключению NRF24l01+ для работы через EspruinoIDE), как я понял там не требовалось подключение IRQ, ну я его и не подключал…

    iskrajspinout11.JPG

    В коде для платы Iskra JS, которая стала emitter(Master) прописал опять-же как из примера(только для нужных контактов):

    SPI2.setup({sck:B13, miso:B14, mosi:B15});

    var nrf = require("NRF24L01P").connect( SPI2, B0, B1 ); //B0(P6),B1(P5) на схеме

    function onInit() {

    nrf.init([0,0,0,0,2], [0,0,0,0,1]);

    }

    onInit();

    setInterval(function() {

    nrf.masterHandler();

    }, 50);

    И все больше ничего не мудрил – но заливается в память через раз (консоль выпадает при заливке прошивки).

    iskrajsminipinout11.JPG

    В коде для платы Iskra JS mini которая у меня стала receiver(Slave) прописал и залил(консоль работала нормально в Espruino ide):

    SPI1.setup({sck:A5, miso:A6, mosi:A7});

    var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );

    function onInit() {

    nrf.init([0,0,0,0,1], [0,0,0,0,2]);

    }

    onInit();

    setInterval(function() {

    nrf.slaveHandler();

    }, 50);

    Тут все подрубал к SPI1 и как из примера наименования пинов совпали.

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

    nrf.sendCommand("1+2", function(r) { print("=="+r); });

    результатом должно быть =3


    Но этого не происходило… пробовал варианты из примера и тоже в пустую.

    Код на Mastereбыл такой:

    var knopa = require('@amperka/button').connect(P3);


    SPI2.setup({sck:B13, miso:B14, mosi:B15});

    var nrf = require("NRF24L01P").connect( SPI2, B0, B1 ); //B0(P6),B1(P5) насхемеискры

    function onInit() {

    nrf.init([0,0,0,0,2], [0,0,0,0,1]);}

    onInit();

    setInterval(function() {

    nrf.masterHandler();

    }, 50);

    knopa.on('press', function() {

    nrf.sendCommand("1+2", function(r) { print("=="+r);

    });

    });

    Прошу подсказать что и где я делал не так? А то запутался и понять где ошибка не могу сам.
    Если можно с подробным описанием, я еще не силен в JS, пока осваиваю.

    Продублировал сообщение с:
    http://forum.amperka.ru/threads/Как-подключить-nrf24l01-к-iskra-js.10663/

    Заранее благодарю и извиняюсь за простыню.