Скетч Arduino + USB обсуждаем, пишем, тестируем

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

LVitat
Сообщения: 29
Зарегистрирован: Пн июн 23, 2014 8:59 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение LVitat » Вт июл 29, 2014 11:27 pm

Облазил весь форум, но примера подключения Arduino без шилда для Raspi так и ненашёл.
Да простят меня гуру … но потратил полтора дня на подключение Raspberry PI по usb к Funduino Mega 2560
(c подключенными: DHT22 и датчиком движения).
Вкладываю свой вариант (нахватал везде понемногу):
1.Устанавливаем python-serial
sudo apt-get install python-serial
2.Как писал ser009 нужно настроить систему для получения состояния датчиков
Создаём Class: Input
Добавляем метод: status_d_input
С кодом:
$this->setProperty('status',$params['status']);
$this->setProperty('updatedTimestamp',time());
delay(20);
создаём свойства: status (Хранить историю (дней):7) и
updatedTimestamp (Хранить историю (дней):7)
Добавляем объекты: D8, DHT_H1, DHT_T1
3.Вот скетч для Arduino:

Код: Выделить всё

#include <Arduino.h>
#include <DHT.h>

#define DHTPIN 2 
#define DHTTYPE DHT22   
#define PIN_PIR (8) 
DHT dht(DHTPIN, DHTTYPE);
int old_D8;       // хранения старого значения входа D8
long time = 0;
void setup()
{
  pinMode(8,INPUT); 
  old_D8=digitalRead(8); 
  Serial.begin(9600); 
  dht.begin();
}
void loop() //основной цикл программы
{
  time++;
 // Serial.println(time);
  int current_D8=digitalRead(8); // считываем состояние дискретного входа D8 и записываем данные в массив current_D8
  if (current_D8!=(int)old_D8)   // если значение current_D8 неравно old_D8 
  {
    old_D8=(int)current_D8; 
      if ((int)old_D8==1)        // передаём только срабатывания датчика
     {
         Serial.print("D8:status_d_input:status:");
         Serial.print((int)current_D8);           
         Serial.println(":"); 
    delay(20);  // от дребезга
     }
  }  
    if (time>18000000)     //примерно 5минут
 {
      time=0;
      float h = dht.readHumidity(); 
      float t = dht.readTemperature();
         Serial.print("DHT_T1:status_d_input:status:");
         Serial.print(t);           
         Serial.println(":"); 
         Serial.print("DHT_H1:status_d_input:status:");
         Serial.print(h);           
         Serial.println(":"); 
}
}
 
Для записи скетча нужна программа Arduino IDE (http://arduino.cc/en/Main/Software)
Перед заливкой в настройках выбрать Плату и Последовательный порт.
4.В папке /usr/local/bin/ создаём файл «usb_arduino»
Со следующим содержимым:

Код: Выделить всё

#!/bin/sh
ARDUINO_PORT=/dev/ttyACM0
stty -F $ARDUINO_PORT raw speed 9600
while read LINE; do
#date
echo $LINE   # для теста можно удалить
str=$LINE
len=`expr length $str` # длинна строки
pos=`expr index $str :` # координата первого двоеточия
pos=`expr $pos - 1`
st1=`expr substr $str 1 $pos`
pos=`expr $pos + 2` 
str=`expr substr $str $pos $len` 
len=`expr length $str` # длинна изъятой строки
pos=`expr index $str :` 
pos=`expr $pos - 1`
st2=`expr substr $str 1 $pos`
pos=`expr $pos + 2` 
str=`expr substr $str $pos $len` # изъятие строки после двоеточия
len=`expr length $str` # длинна изъятой строки
pos=`expr index $str :` 
pos=`expr $pos - 1`
st3=`expr substr $str 1 $pos`
pos=`expr $pos + 2` 
str=`expr substr $str $pos $len` # изъятие строки после двоеточия
len=`expr length $str` 
pos=`expr index $str :` 
pos=`expr $pos - 1`
st4=`expr substr $str 1 $pos`

URL='http://localhost/objects/?object='$st1'&op=m&m='$st2'&'$st3'='$st4
wget -q -T 5 -O - $URL

done < $ARDUINO_PORT
задаём права файлу 0755


подключаем всё и проверяем - в консоли пишем «usb_arduino»
Если всё работает можно добавить скрипт на автозапуск.
PS: Буду рад если это кому поможет, мне данной информации очень не хватало.
Изображение
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение Ivan » Ср июл 30, 2014 7:14 am

Может я чего то не понимаю
А зачем вам Ардуина?

Первая ссылка - прямое подключение
http://habrahabr.ru/post/167459/
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение sergejey » Ср июл 30, 2014 10:25 am

LVitat писал(а):Облазил весь форум, но примера подключения Arduino без шилда для Raspi так и ненашёл.
Да простят меня гуру … но потратил полтора дня на подключение Raspberry PI по usb к Funduino Mega 2560
(c подключенными: DHT22 и датчиком движения).
Вкладываю свой вариант (нахватал везде понемногу):
...
подключаем всё и проверяем - в консоли пишем «usb_arduino»
Если всё работает можно добавить скрипт на автозапуск.
PS: Буду рад если это кому поможет, мне данной информации очень не хватало.
Спасибо.
Вот ещё вариант. Где-то уже было по-моему, но что-то сходу не нашёл где именно. Этот вариант работает немного более универсально и воспринимает в точности такой же формат ссылки как описано в статье Arduino без Ethernet для Windows

Код: Выделить всё

#!/bin/bash

ARDUINO_PORT=/dev/ttyACM0
ARDUINO_PORT_SPEED=9600
LOCAL_BASE_URL="http://192.168.0.10"

stty -F $ARDUINO_PORT ispeed $ARDUINO_PORT_SPEED ospeed $ARDUINO_PORT_SPEED cs8 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

while read LINE; do

# Processing incoming URLs from controller
REGEX='^GET (.+)$'
if [[ $LINE =~ $REGEX ]]
then
URL=$LOCAL_BASE_URL${BASH_REMATCH[1]}
wget -O http.tmp $URL
echo Getting URL
echo $URL
fi

done < $ARDUINO_PORT
За это сообщение автора sergejey поблагодарил:
ErmolenkoM (Ср июл 30, 2014 12:35 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
LVitat
Сообщения: 29
Зарегистрирован: Пн июн 23, 2014 8:59 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение LVitat » Ср июл 30, 2014 1:58 pm

Ivan писал(а):Может я чего то не понимаю
А зачем вам Ардуина?
Чтобы иметь перспективу роста - максимально разгружаю raspberry.
Да и лёгких путей мы не ищем ))
Изображение
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение Ivan » Ср июл 30, 2014 2:58 pm

Про разгрузку я сам за. Но иметь несколько serrial тем более USB. У вас получится ограниченное количество такие подключений 1-4. Лучше иметь отдельные контролеры со своей автоматизацией (настраиваемой). И подключать их к общей шине, для чтения и управления.
1. Увеличится скорость взаимодействия
2. Не будет проблемы падения всей системы из-за 1 элемента
3. Разгрузится основной контролер

Шину выбирать на ваше усмотрение. Но что-то в последнее время склоняюсь больше к Ethernet, RF, RS485, 1Wire

1Wire - я уже обкатал, и понял что ошибся с выбором = Слишком медленная и глючная. Хотя уже не лезу в неё полгода и пока работает стабильно. Но как полезу, будет опять летать

Ehternet - отличная вещь, но не везде есть. Да и удорожает контролер.
RF - хочу испытать, и по всей видимости перейду на неё
RS486 - тоже ничего, но думаю что будут те же проблемы что 1Wire
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
LVitat
Сообщения: 29
Зарегистрирован: Пн июн 23, 2014 8:59 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение LVitat » Ср июл 30, 2014 3:37 pm

Ivan писал(а): Шину выбирать на ваше усмотрение. Но что-то в последнее время склоняюсь больше к Ethernet, RF, RS485, 1Wire
Лучший вариант конечно с шилдами, но у меня на роутере все выходы давно используются, вот и извращаюсь.
Ivan писал(а): Лучше иметь отдельные контролеры со своей автоматизацией (настраиваемой)
Вот я и хочу к raspberry подключить одну большую Arduino с двумя висящими на ней nano.
Попробовал вариант Сергея – то теряются, то нетак доходят данные.
Изображение
LVitat
Сообщения: 29
Зарегистрирован: Пн июн 23, 2014 8:59 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение LVitat » Вт сен 23, 2014 12:05 am

Народ подскажите..
Funduino Mega 2560 подключена по USB к Raspberry, проработала отлично пару месяцев, а вчера перестала отвечать на запросы и слать данные.
Перезагрузка и halt не помогли, думал причина в распберри.....короче вылечилось перезаливкой скетча.
Вопрос - У ATmegi такое бывает или это глюк клона?
Раньше никогда не имел дела с ATmega только Microchip, у них с таким никогда несталкивался.
Изображение
avgaz
Сообщения: 39
Зарегистрирован: Пт дек 11, 2015 10:20 pm
Благодарил (а): 1 раз
Поблагодарили: 4 раза

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение avgaz » Пт янв 15, 2016 6:24 pm

Подскажте в чем может быть проблема в прога arduino_gw не в какую не читает данные просто висит
15.01.2016 17:32:01 Running without connection to COM port и все скорость и порт правильно прописаны
сетч простейший для теста

Код: Выделить всё

char buf[80];

void sendHTTPRequest() {
  Serial.println(buf); 
}


void setup()
{

 Serial.begin(115200); 
}

void loop()
{

  sprintf(buf, "GET /objects/?object=TempSensor01&op=m&m=tempChanged&t=1005 HTTP/1.0");
  sendHTTPRequest();
  
  delay(1500);

 
} 
в чем проблема?
Zaezd2008
Сообщения: 165
Зарегистрирован: Чт ноя 13, 2014 8:56 pm
Благодарил (а): 23 раза
Поблагодарили: 7 раз

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение Zaezd2008 » Сб фев 06, 2016 9:58 pm

А без шильда, через USB возможно реализовать управление нагрузкой (http://majordomo.smartliving.ru/Main/ArduinoCode3) ?
Antilox
Сообщения: 17
Зарегистрирован: Чт май 21, 2015 7:29 pm
Благодарил (а): 5 раз
Поблагодарили: 0

Re: Скетч Arduino + USB обсуждаем, пишем, тестируем

Сообщение Antilox » Вт мар 08, 2016 1:02 am

Добрый день!

Получилось считать состояние входа. Ок.

В мануале есть Update: последнюю версию программы можно использовать ещё и для отправки команд в Arduino следующим образом:
1. Запускаем приложение, настраиваем, соединяемся с Arduino (так работало и раньше)
2. Если нужно что-то послать в открытое соединение, то просто из командной строки запускаем это же приложение, но в качестве параметров указываем строчку, которую нужно послать.

Можете подробней со скринами и примерами показать принцип? Допустим в мажодомо свич дергает ногу ардуино.
Ответить