отправка данных в сериал с компьютера по команде с batch

mf211
Offline
Зарегистрирован: 04.02.2021

Здравствуйте. 

что хотелось сделать: по расписанию с компьютера отправляется команда и ардуинка включает или выключает освещение.

что имеется: 

код на ардуино:

#define RELAY_PWR 7
#define RELAY_SW 8
int val;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(RELAY_PWR, OUTPUT);
  digitalWrite(RELAY_PWR, HIGH);
  pinMode(RELAY_SW, OUTPUT);
  digitalWrite(RELAY_SW, HIGH);
 
}

void loop()
{

  if (Serial.available()) {

    val = Serial.read();

    if (val == '1') {
      digitalWrite(RELAY_PWR, LOW);
      Serial.print("Light_on \n");
      for (int i = 0; i < 17; i++)
      {
        digitalWrite(RELAY_SW, LOW);
        delay(100);
        digitalWrite(RELAY_SW, HIGH);
        delay(100);
      }
    }
    if (val == '0') {
      digitalWrite(RELAY_PWR, HIGH);
      Serial.print("Light_off \n");
    }
  }
}

несколько комментариев: в качестве нагрузки используется гирлянда с переключателем режимов включения. первое реле (RELAY_PWR) включает\выключает саму нагрузку, второе реле (RELAY_SW) подает сигналы на кнопку переключения режимов (постоянное свечение - 17 позиция), ну и соответственно используется как гальваническая развязка на всякий случай.

код и софт на компе: 

управление на данный момент выполняется отправкой соответственно 1 или 0 в порт через plink (компонент putty), но сообщение уходит только в интерактивном виде. ключ -batch не работает. 

plink.exe -serial com7 -batch -m 0.txt

ЧЯДНТ

может кто-то уже сталкивался с подобными вопросами и имеет варианты решения?

часов rtc нет, возможно в будущем прицеплю.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А ты не через bat файл, а напиши программу на Delphi/C#, вставь её запуск в автозагрузку, да отправляй всё что угодно когда и сколько хочешь. 

mf211
Offline
Зарегистрирован: 04.02.2021

Языками не владею.. к сожалению. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

штош, тогда я снимаю своё предложение.  А так было бы красиво и изящно. 

http://arduino.ru/forum/otvlechennye-temy/na-fone-obshchei-isterii-po-ki...

mf211
Offline
Зарегистрирован: 04.02.2021

С esp было бы гораздо проще, но там логический уровень 3.3 вольта.

Вы правы, было бы весьма изящно.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

mf211 пишет:

С esp было бы гораздо проще, но там логический уровень 3.3 вольта.

А это проблема?

kalapanga
Offline
Зарегистрирован: 23.10.2016
Собственно как-то так, командой copy:
copy 0.txt COM7
Порт по идее уже настроен наверное, но можно добавить сначала строку с нужными значениями: 
mode COM7 BAUD=9600 PARITY=n DATA=8
 
Так же сгодится команда type или даже echo с перенаправлением вывода в порт.
 
mf211
Offline
Зарегистрирован: 04.02.2021

К сожалению эти варианты были испробованы самыми первыми. железка на них отреагировала никак. 

 

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Посмотрите, не происходит ли RESET  ардуино при отправке в СОМ порт из командного файла.

kalapanga
Offline
Зарегистрирован: 23.10.2016

mf211 пишет:

К сожалению эти варианты были испробованы самыми первыми. железка на них отреагировала никак. 

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

Хотя сорри! Bruzzer правильно написал - ардуинка перезагружается.

kalapanga
Offline
Зарегистрирован: 23.10.2016

del

 

sadman41
Offline
Зарегистрирован: 19.10.2016

 

void setup() {
  Serial.begin(115200);
  while (Serial.available() == 0 );
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
@echo off
mode COM4 BAUD=115200 PARITY=n DATA=8 DTR=OFF
TIMEOUT 1 /nobreak  > NUL
::mode COM4 BAUD=115200 PARITY=n DATA=8 DTR=OFF
::TIMEOUT 1 /nobreak  > NUL
type 0.txt > COM4 

Но, в первый раз после вызова MODE, все равно винда за DTR дёргает. Так что срабатывать начинает со второго раза.

UPD: Похоже, что таково дефолтовое поведение DOS/Windows: первое открытие порта, после отключения DTR, все равно его передернет. Второе и последующее - уже не подвержены таковому дефекту. В Powershell так же происходит.

 

mf211
Offline
Зарегистрирован: 04.02.2021

Всем спасибо.

какого-то лешего 

@echo off
mode COM3 BAUD=9600 PARITY=n DATA=8 DTR=OFF
TIMEOUT 1 /nobreak  > NUL
::mode COM3 BAUD=9600 PARITY=n DATA=8 DTR=OFF
::TIMEOUT 1 /nobreak  > NUL
type 0.txt > COM3 

вот это запустилось. На данный момент в качестве ОС установлена win10 ltsc

порты и параметры были прописаны корректно.

mf211
Offline
Зарегистрирован: 04.02.2021

Rumata пишет:

mf211 пишет:

С esp было бы гораздо проще, но там логический уровень 3.3 вольта.

А это проблема?

Найти релюшку, которая будет нормально отрабатывать логическую единицу в 3.3 вольта и при этом коммутировать переменку сетевого питания достаточно проблематично. Если у вас есть варианты, с удовольствием выслушаю)

FoxJone
Offline
Зарегистрирован: 19.04.2019

Самая простая дешевая релюха на 10 ампер прекрасно работает на 3 вольта. Хотя в описании написано 5. Проверено лично на СТМ (который тоже 3 вольта).

Типа такой: https://www.radiosfera.org/catalog/rele/releynye_moduli/500/

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mf211 пишет:

Найти релюшку, которая будет нормально отрабатывать логическую единицу в 3.3 вольта и при этом коммутировать переменку сетевого питания достаточно проблематично. Если у вас есть варианты, с удовольствием выслушаю)

Найти релюшку, которую можно было бы подцеплять напрямую к выходам контроллера - вообще проблема. В любом случае нужен усилитель тока и цепи защиты. Т.е. нужен модуль реле. А такие модули прекрасно работают с управляющим напряжением 3.3В. Так что проблем нет. От слова совсем.