Сообщество - Arduino & Pi

Arduino & Pi

1 493 поста 20 825 подписчиков

Популярные теги в сообществе:

19
Вопрос из ленты «Эксперты»

Как заставить мигать встроенный светодиод?

Купил платку "Контроллер ESP32 (ESP-WROOM-32) 38pin" именно такую, как на фото ниже. При включении светодиод мигал. В Arduino IDE плату прописал, залил скетч для подключения к сети WiFi, скетч заработал. Решил назад записать скетч blink, а встроенный светодиод не мигает. Светодиод не подключен к выводу 2. Но ведь первоначально светодиод мигал. Как заставить мигать этот светодиод.

Как заставить мигать встроенный светодиод?
20

Танковое управление ровера одним пальцем. Arduino, nrf24l01, MX1508

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

В этом проекте помимо геймификации сильно по мотивации ударило то что прямо по ходу пропал смысл доделывать этот ровер, вернее он не пропал, а была неопределенность, и плюс у меня появилось некоторое количество других неотложных дел. Тем не менее, доску в обсидиане я заполнил и проект так же делал в формате квестов. Это очень удобно, вся информация по проекту там визуализирована, все статьи, все скетчи и схемы. Я легко могу забыть этот проект, и все равно в любой момент могу расконсервировать и повторить его.

Показать полностью
17
Вопрос из ленты «Эксперты»

Прошу совета по UART (Arduino)

Есть два устройства (CB и HU), которые общаются по UART на 38400.
Мне нужно подменять данные, которые HU получает от CB: скажем, в последовательности 0xFF 0x11 0x00 0x00 0xXX подменить нули на свои данные.
С обработкой протокола всё понятно, вопрос про аппаратное подключение: такой способ как на рисунке сработает? Т.е. просто разорвать канал CB.Tx > HU.Rx и внедрить в него мой фильтр. Задержка в передаче на время обработки протокола приемлема.

Прошу совета по UART (Arduino)
40

Open source Modbus TCP — RTU конвертор

Добрый день коллеги, поговорим о прозрачном конверторе Modbus TCP в Modbus RTU.

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

Мы предложим свободно программируемый контроллер AntexGate с помощью которого можно получить конвертер Modbus tcp – Modbus rtu – can – profitnet – bacnet – mqtt – http – opc UA – другой протокол.

Итак, рассмотрим первую связку Modbus TCP – Modbus RTU, нам понадобится сам контроллер AntexGate либо другой компьютер с linux/windows на борту и периферией RS485.

Первое, что необходимо – это установить программный продукт Node-Red, это делается одним скриптом в командной строке:

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/...)

Далее после установки делаем Node-red сервисом:

sudo systemctl enable nodered.service

Перезагружаем железяку:

sudo reboot

Теперь попадаем в среду нашего программного конвертора Node-red через web браузер по ссылке ip шлюза:1880

Далее настроим скрипт, который конвертирует посылку Modbus TCP в RTU, посылает в RS485/232 порт, ждет ответ и тут же преобразует ответ обратно в Modbus TCP.

Заходим в "меню" > "импорт"

Проект конвертора Modbus TCP <> RTU (прошу прощения в пикабу нет спойлера)

[ { "id": "22ff3060.54da6", "type": "function", "z": "de082ac2.4b8bf8", "name": "Convert TCP to RTU", "func": "var MBAPHeader = [5];\nvar crc = 0xFFFF;\n\nMBAPHeader[0]= msg.payload[0];\nMBAPHeader[1]= msg.payload[1];\nMBAPHeader[2]= msg.payload[2];\nMBAPHeader[3]= msg.payload[3];\nMBAPHeader[4]= msg.payload[4];\nflow.set('MBAP_HEADER', MBAPHeader);\n\nvar ReqLen = msg.payload[5];\nvar MBLen = (msg.payload.length)-ReqLen;\nvar MBReq = [MBLen];\n\nfor (let x=0; x < MBLen;x++){\n MBReq[x] = msg.payload[x+ReqLen];\n}\n\nfor (var req = 0; req < ReqLen; req++) {\n crc ^= MBReq[req]; // XOR byte into least sig. byte of crc\n \n for (var i = 8; i !== 0; i--) { // Loop over each bit\n if ((crc & 0x0001) !== 0) { // If the LSB is set\n crc >>= 1; // Shift right and XOR 0xA001\n crc ^= 0xA001;\n } else { // Else LSB is not set\n crc >>= 1; // Just shift right\n }\n }\n}\n\nvar MyCRC = crc.toString(16);\nMBReq[MBLen+1] = parseInt(MyCRC.substring(0,2),16);\nMBReq[MBLen] = parseInt(MyCRC.substring(2,4),16);\n\nvar buf = new Buffer(MBReq);\nmsg.payload = buf;\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 300, "y": 100, "wires": [ [ "7e62bbbc.bd8ea4" ] ], "outputLabels": [ "XO" ] }, { "id": "7e62bbbc.bd8ea4", "type": "serial request", "z": "de082ac2.4b8bf8", "name": "", "serial": "27dabad398437b7e", "x": 490, "y": 100, "wires": [ [ "db79ee80.1d792", "9e53f02d0a4e04fb" ] ] }, { "id": "db79ee80.1d792", "type": "function", "z": "de082ac2.4b8bf8", "name": "Convert RTU to TCP", "func": "if (msg.payload.length > 0) {\n var resLen = msg.payload.length - 2;\n var respond = [];\n respond[0] = flow.get('MBAP_HEADER')[0];\n respond[1] = flow.get('MBAP_HEADER')[1];\n respond[2] = flow.get('MBAP_HEADER')[2];\n respond[3] = flow.get('MBAP_HEADER')[3];\n respond[4] = flow.get('MBAP_HEADER')[4];\n respond[5] = resLen;\n\n for (let req = 6; req < resLen+6; req++) {\n respond[req]= msg.payload[req-6];\n }\n msg.payload = new Buffer(respond);\n return msg;\n} else {\n return null;\n}\n", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 640, "y": 60, "wires": [ [ "2622a1e893f52bed", "140a62f5366490d9" ] ] }, { "id": "55423964225fa869", "type": "comment", "z": "de082ac2.4b8bf8", "name": "Convert Modbus TCP to Modbus RTU", "info": "", "x": 170, "y": 40, "wires": [] }, { "id": "cbd6e86861af643d", "type": "tcp in", "z": "de082ac2.4b8bf8", "name": "Modbus TCP - IN", "server": "server", "host": "", "port": "5002", "datamode": "stream", "datatype": "buffer", "newline": "", "topic": "", "trim": false, "base64": false, "tls": "", "x": 100, "y": 100, "wires": [ [ "22ff3060.54da6", "48471bdeae3a1d30" ] ] }, { "id": "2622a1e893f52bed", "type": "tcp out", "z": "de082ac2.4b8bf8", "name": "Modbus TCP - OUT", "host": "127.0.0.1", "port": "502", "beserver": "reply", "base64": false, "end": false, "x": 850, "y": 100, "wires": [] }, { "id": "9e53f02d0a4e04fb", "type": "debug", "z": "de082ac2.4b8bf8", "name": "debug 17", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 640, "y": 220, "wires": [] }, { "id": "140a62f5366490d9", "type": "debug", "z": "de082ac2.4b8bf8", "name": "debug 18", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 820, "y": 200, "wires": [] }, { "id": "48471bdeae3a1d30", "type": "debug", "z": "de082ac2.4b8bf8", "name": "debug 19", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 260, "y": 200, "wires": [] }, { "id": "27dabad398437b7e", "type": "serial-port", "serialport": "/dev/ttyUSB0", "serialbaud": "115200", "databits": "8", "parity": "none", "stopbits": "1", "waitfor": "", "dtr": "none", "rts": "none", "cts": "none", "dsr": "none", "newline": "5", "bin": "bin", "out": "time", "addchar": "", "responsetimeout": "1000" } ]

Копируем скрипт, нажимаем "Импорт"

Копируем скрипт, нажимаем "Импорт"

Настраиваем порт для просушки в узле Modbus TCP IN, рекомендуем не использовать стандартный 502, а использовать нестандартный порт более 1024, для них не нужны дополнительные разрешения в Linux.

Настраиваем последовательный порт RS485/232 на скорость конечного железа, поддерживающего протокол Modbus RTU.

Жмем "Развернуть" и наш конвертер готов!

Настраиваем Ваш инструмент верхнего уровня, например Modbus TCP OPC сервер стандартно: ip_адре_ шлюза:5002:id_RTU_устройства.

Все работает стабильно, чтение и запись! Посылки как видим между запросом и ответом 100-200мс, что равно пингу. Удаленный шлюз AntexGate работает на встроенном LTE модеме.

Бонусом, для тех, у кого софт верхнего уровня поддерживает функцию Modbus RTU поверх TCP включаем это правило.

В Node-Red упрощаем поток и исключаем функции RTU TCP обработки, и наш проект в Node-Red становится без единой строчки кода.

Контроллер AntexGate в связке с Node-red является отличным универсальным решением для обработки, пересылки и хранения данных. Прошу прощения за рекламу, однако выше представленный проект Вы можете реализовать на любом железе и любой ОС.

Присоединяйтесь к нашему сообществу в Telegram

Железо можно получить на тесты, пишите на почту: info@antexcloud.ru (на три месяца для ЮР лиц и ИП)

Показать полностью 8
9
Вопрос из ленты «Эксперты»

Прошу помощи в создании. ESP32 или что-то другое?

Всем привет!
Прошу помощи в создании одной штуки.
Если надо - не безвозмездно.

ТЗ следующее:
В автомобиль, где напряжение бортсети достигает до 15 в (хотя в комментах подсказывают что будут всплески куда высокие, до 200в, но суть ясна), и эксплуатация от -30 до +30 градусов нужно установить "звездное небо" с 3-4 "кометами" в потолок.

"Звёздное небо" - оптоволоконные нити, в один торец которых стороны будут светить светодиоды, а другой будет заподлицо вмонтирован в тканевую обшивку потолка.
1 светодиод - пачка оптоволокна, и таких соответственно какое-то количество, пусть например 20 штук светодиодов на 800 оптоволокон.
Нужно будет эмпирическим методом подбирать предполагаю.
Минимальные эффекты - мерцание с высокой частотой, возможно плавная смена яркости.
Максимальные - по ситуации, может настройка цвета, яркости или какие-то другие программы.

"Кометы" - те же оптоволоконные нити, выстроенные в дугу-синусоиду-иное, и уже 1 светодиод = 1 нить.
Эффект - последовательное включение от первого до последнего светодиода, с плавным погасанием отключающихся светодиодов "комета с хвостом"
Минимальные эффекты - уметь делать этот эффект белым цветом.
Максимальные - по ситуации, может настройка цвета, яркости или какие-то другие программы.

Таких "Комет с хвостом" будет несколько штук, 2-4.
Время включения этих комет нужно будет сделать разным, и соответственно паузу между ними так же нужно иметь, а не так чтобы циклично каждые 2 секунды включались)

Так же нужно чтобы контроллер помнил последнее состояние/программу и запускался сразу после подачи питания.

Натыкивать оптику, крепить её к светодиодам, паять проводочки это без вопросов.

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

Насколько я понял, для создания такой вещи мне необходима адресная светодиодная лента, скорее всего с минимальным "пикселем" в 1 светодиод (это скорее всего микросхемка вмонтирована в сам светодиод будет)
Напряжением... в 12? вольт...
Протокол управления сказали что SPI будет приемлем.
DMX вроде как надежнее (не последовательное соединение), но его почему-то отвергли как более сложный вариант

И некая плата управления.

Мне порекомендовали посмотреть на платы ESP32
Т.к. к ним видимо можно писать программы, а так же эта плата имеет несколько выходов для SPI ленты.

Т.е. можно использовать:

1 выход на ленты с звездными небом
2 выход на комету 1
3 выход на комету 2
4 выход на комету 3

И т.д.

И для каждого выхода будет своя программа.

Ну и нужно подобрать какой-то стабилизатор питания для этого всего дела.

По управлению и настройкам конечно было бы здорово иметь какую нибудь программу на телефоне типа magic home pro или подобную, но эта хотелка не является обязательной.

Что скажете други?

Показать полностью

Самодельный боксмод

Привет! Мой первый пост на Пикабу. Не знаю как его оценят, но не суть. Я решил сделать первую самоделку в жизни и выбрал боксмод. Раньше я не занимался ни программированием, ни самоделками. Решил делать я по схеме и уже готовой прошивке. За основу взял arduino nano. Сама система будет на мосфете. Лишь бы не вышла ручная граната. На этом всё! Хорошего дня.

44

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect

источник

Raspberry pi 5, часть 1

rpi5

rpi5

Протестируем работу Raspberry pi 5, посмотрим особенности, а также проверим возможность удалённого управления интерфейсом. Тема нам интересна, ранее у нас были эксперименты с ARM, в начале канала описаны первые шаги.

rpi-connect

rpi-connect

Сразу отметим, что для полноценной работы rpi5 требуется мощный блок питания на 5А. В нашем случае на блоке питания на 3А rpi5 работала, но на рабочем столе всё время "сигналила". В реальности потребление было меньше, естественно, без подключения других компонент, только вентилятор:

psu

psu

warning

warning

(!) Для информации: на Али китайские коллеги часто продают абсолютно не подходящие по параметрам блоки питания, перед покупкой читайте комментарии.

По параметрам rpi5 превосходит rpi4 раза в 2: новый процессор, память, видео, поддержка быстрых дисков etc. Также есть приятные мелочи - кнопка включения; она работает так - при подключении питания rpi5 включается сама, далее выключить/включить можно с кнопки.

working

working

Нагревается rpi5 прилично, поэтому ставить радиатор+вентилятор обязательно, об этом мы говорили ранее:

cooling

cooling

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

Для проверки rpi-connect нужна десктопная версия системы:

Raspberry PI Imager

Raspberry PI Imager

После установки плата автоматически перезагружается несколько раз. Честно сказать, десктопной версией мы пользовались всего несколько раз. Тут ничего особенного нет. Советуем при запуске Raspberry PI Imager настроить:

  • логин/пароль пользователя

  • подключение к своей точке доступа, если нет кабельного подключения

  • включить ssh-сервер

Для проверки rpi-connect нужно обновить пакеты, ОС и установить пакет с последующей перезагрузкой:

sudo apt install rpi-connect

Все действия по настройке rpi-connect сделать только через консоль не получится.

Регистрация на сайте нужна (им для учёта нас) для возможности удалённого входа по логину/паролю из любого браузера. Ресурс для входа будет вида:

https://connect.raspberrypi.com/devices/qwertyui-1234-5678-zxcv-1234567890qw

rpi-connect

rpi-connect

Производитель ПО утверждает, что соединение производится peer-to-peer. Мы при работе из браузера наблюдали торможение, "шлейф" при ресайзе окон, иногда при наборе текста.

Наши выводы:

  • rpi5 - достаточно мощная плата, позже мы еще ещё постестируем её возможности

  • охлаждение и блоки питания - важные составляющие, на этом экономить нельзя

  • функция rpi-connect (beta) интересна, но пока притормаживает. Если нужно просто удалённо управлять платой с графической оболочкой - используйте. Нам пока хватает ssh

Показать полностью 8
Отличная работа, все прочитано!