Wiren board + arduino in rs232

Добрый день! Пытаюсь связать wiren board 7 и arduino через RS232. Плата расширения WBE2-I-RS232 вставлена в MOD1 и в hardware conf определена. Пытаюсь послать команду в hex, нет ответа. Minicom не позволяет написать что либо, лишь настройки.
Подскажите, пожалуйста, есть ли инструкция взаимодействия данных устройств?

Предлагаю простой медод диагностики: отключив arduino замкнуть RX и TX модуля и в том же minicom попробовать что-то отправить.
А что за ардуинка (какая плата)? Как подключен к ней RS-232? Если залить в нее простое эхо (получили байт по последовательному порту - отправили его же) - то работает?
Ну и вдобавок к “эху” можно дописать постоянную, раз в секунду передачу с ардуинки в порт строки, аналог “блинка”.

https://wirenboard.com/wiki/Minicom
по этой методичке, если делать то в minicom`e он не дает ввести команду…только настройки.

image

такое меню, где никак ничего ввести.

Arduino Mega 2560
в 0 и 1 пин с WBE2-I-RS232

Как раз все отлично вводится. Включите локальное эхо чтобы убедится (или замкните клеммы)

Эмммм… На Меге (Как и на остальных платах) эти выводы - uart. Имеют логический уровень TTL!
Нельзя к ним подключать RS-232!
https://www.codetd.com/ru/article/12258515
Разные не только логические уровни наприяжения, которыми можно просто спалить атмегу, хотя бы поднятием напряжения питания через защитные диоды портов но и уровни инвертированы.

Советую для теста подключить прямо в USB контроллера, штатным USB портом. Отключив от RS-232.

Подключил к USB. Заработало. Спасибо!

И еще, давно не занимался wiren board.
Чтобы с веб интерфейса переслать команду по шине USB. Нужно ли конфигурировать что либо? или просто написать правило?

Конфигурировать - нет, не надо, достаточно echo -e "XXXXXX" >/dev/[порт], вызвав в скрипте внешнюю команду. Да, скрипт надо написать, например с виртуальной кнопкой и вызовом правила по этой кнопке.

Так, понял. Спасибо!

var portUART = “/dev/ttyUSB0”;//порт
defineVirtualDevice(“buttons”, {
title: “Button Test”,
cells: {
somebutton: {
type: “pushbutton”
}
}
});

defineRule(“buttontest”, {
whenChanged: “buttons/somebutton”,
then: function () {
var dataString = “bin1 1;”;
//
//log.info(“dataString”,dataString)

runShellCommand("echo -e bin1 1; > /dev/ttyUSB0");

log("button pressed!");
log("echo -e bin1 1; > "+portUART);

}
});

При нажатии на кнопку происходит вкл и сразу выкл лампы. Такое же происходит при подключение serial_tool. Как будто просто инициализая.
Лампа моргает, когда в консоле прописать “echo -e “bin1 0;” > /dev/ttyUSB0”.
Но если в соседнем терминале PuTTY прописать “serial_tool -b 9600 -p N -d 8 -s 1 -t 1 /dev/ttyUSB0” лампочка моргнет и теперь написав “echo -e “bin1 1;” > /dev/ttyUSB0” в первом терминале лампочка включится.
Можете что нибудь подсказать по этому вопросу?

Но логично, если глянуть на схему:Screenshot from 2022-04-05 14-28-47
(принципиально схемы не отличаются) то видно что DTR микросхемы USB-UART преобразователя заведен через конденсатор 0.1мФ на ножку RESET микроконтроллера.
То есть при DTR просто перезапускается.
Для борьбы с нежелательными перезапусками при обмене по USB на плате как правило предусмотрены перемычки, которые замыкаются или режутся, тут как раз все зависит от версии (и больше от производителя) конкретной платы.

То есть без изменений платы mega 2560 данную ситуация не обойти, я правильно вас понял?

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

Можно ли сделать поток на js? Если да, нет ли примеров?

Не делал подобного. Но, по идее можно открыть сеанс screen, в нем запустить tail с выводом в порт и отправлять перенапрвляя в screen… Нo не пробовал. По-моему проще убрать reset.

Мы решили пока отойти от идеи USB и RS232, пытаемся работать с RS485.
Может, конечно, у меня руки корявые, но в консоли “echo -e “bin1 1;” > /dev/ttyRS485-1” включает лампочку, а скрипт нет.

defineVirtualDevice(“buttons”, {
title: “Lamp1 On”,
cells: {
somebutton: {
type: “pushbutton”
}
}
});

defineRule(“buttontest”, {
whenChanged: “buttons/somebutton”,
then: function () {
runShellCommand(“echo -e “bin1 1;” > /dev/ttyRS485-1”);
log(“echo -e “bin1 1;” > /dev/ttyRS485-1”);
}
});

А результат выполенения в скрипте (и вывод) - какой?

Тут непонятно, где какие кавычки.
Если вставляете код в форум, чтоб движок кавычки не ломал - используйте “```”

В логах отображается, что команда отправлена.

Переделал команду на runShellCommand(“echo -e ‘bin1 1;’ > /dev/ttyRS485-1”); тоже самое.

Скрипт был таким же, когда посылал команду по /dev/ttyUSB0. поменялся только порт.

Какой вывод (stdout) после выполнения. Выведите в лог и посмотрите результат.

image

defineRule(“Lamp1_switch”, {
whenChanged: “Lamp_control/enabled”,
then: function (newValue, devName, cellName) {
if (!newValue) {
log.info (“START!!!”)
// Запуск shell-команды с выводом топиков
runShellCommand(“echo -e ‘bin1 1;’ > /dev/ttyRS485-1”,
{
captureOutput: true, //Захватывать stdout
captureErrorOutput: true, //Захватывать stderr (если нужно)
exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
{
//log(“cmd output: " + capturedOutput); //строка полностью
capturedArray = capturedOutput.split(”\n"); //Разбиваем полученную строку по символу переноса строки.
capturedArray.forEach(function(item){ //Для каждой строки
log.info (“Massiv!!!”, item)
log(“Topic: " + item.split(” ")[0]) // topic
log(“value: " + item.split(” ")[1]) // value
})
log("cmd Erroroutput: " + capturedErrorOutput); //Если нужен вывод stderr
}
})

  //runShellCommand("echo -e \"bin1 1;\" > /dev/ttyRS485-1");
  log('echo -e "bin1 1;" > /dev/ttyRS485-1');
}
else {
  runShellCommand("echo -e \"bin1 0;\" > /dev/ttyRS485-1");
  log('echo -e "bin1 0;" > /dev/ttyRS485-1');
}
log("button pressed!");   

}
});

Использовал такой код, не знаю это ли имелось ввиду?

раскомментировать.
Ну и пользуйтесь для вставки кода “```”