Categories
DIY

Rockets & Bishops

А теперь и обещанная вторая часть этого мракобесия.

Все проверено и работает.

А теперь и обещанная вторая часть этого мракобесия.

Все проверено и работает.

Напомню трепетному читателю, как это работает.

Светодиодная лента – драйвер светоидиодной ленты – в разрыве стоит реле  Arduino NanoRaspberry Pi.

 Собственно, чтобы это все работало нам нужно сделать:

  1. Залить на Arduino скетч. Привожу пример того, что сейчас работает, но это просто из-за того что не хочется идти и перезаливать:
 int value; //переменная
 int Reley = 7; // порт к которму подключен пин реле. (порт D7)
 void setup()

 {
 Serial.begin(9600); // запускаем работу с портом
 pinMode(Reley, OUTPUT); //говорим, что порт Reley, т.е. порт D7 явлюяется портом вывода
 Serial.println(value);
 }

void loop()
 {
 if (Serial.available()) //если из последовательного интерфейса что пришло, значит…
 {
value = Serial.read(); // заносим в переменную value, то что пришло в порт
 if (value == '1') // если пришел символ "1" включаем реле, т.е. подаем высокий уровень на пин D7
 {
 digitalWrite(Reley, HIGH);
 Serial.println("Reley — ON");
 }
 if ( val == '0') // если пришел символ "0" выключаем реле
 {
 digitalWrite(Reley, LOW);
 Serial.println("Reley — OFF");
 }
 }
 }
  1. Далее нам необходимо все это счастье подружить с Rasp Pi. Как уже писал ранее, для того, чтобы что-то с этим делать, нам нужно для начала установить pySerial. В нашем случае для малинки это делалось так:

sudo apt-get install python-serial

После этого можно будет попробовать собрать скрипты для Python, ибо именно им проще всего, как показала практика пользоваться для управления этой радостью.

 Использовались скрипты, сделанные на коленке:

Включение света:

import time

 import serial

 arduino=serial.Serial(“/dev/ttyUSB0”,9600,timeout=1000)

 time.sleep(2)

 arduino.write(‘1’)

Выключение света, очевидно:

import time

 import serial

 arduino=serial.Serial(“/dev/ttyUSB0”,9600,timeout=1000)

 time.sleep(2)

 arduino.write(‘0’)

Магическое использование библиотеки time обосновано исключительно тем, что Arduino при подаче на нее сигнала просто жаждет перезагрузиться и то, что происходит дальше – не происходит. sleep(2) не дает этому случиться.

Есть более радикальный вариант – прикрутить/припаять конденсатор в 10 микроФарад между GND и RST

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

locations=[‘/dev/ttyUSB0′,’/dev/ttyUSB1′,’/dev/ttyUSB2′,’/dev/ttyUSB3’,
‘/dev/ttyS0′,’/dev/ttyS1′,’/dev/ttyS2′,’/dev/ttyS3’] 

3. Следующим этапом этого мероприятия является подключение PHP для выполнения этих скриптов. Так как все происходит в ,мягко говоря, гетерогенной среде (скрипты писались в bash под Windows 10 из-под подключения через ssh к Raspberry PI), поэтому разместил Apache и PHP на малинке и нарисовал где-то такой скрипт для проверки работоспособности этого мракобесия:

<html>

 <head>

 <meta name="viewport" content="width=device-width" />

 <title>Light Control</title>

 </head>

          <body>

         Light Control:

          <form method="get" action="light2.php">

                  <input type="submit" value="ON" name="on">

                  <input type="submit" value="OFF" name="off">

          </form>

          <?php

if(isset($_GET['on'])){

 $python = exec('/usr/bin/python /var/www/html/enablelight.py');

          }

          else if(isset($_GET['off'])){

 $python = exec('/usr/bin/python /var/www/html/shutdownlight.py');

          }

          ?>

          </body>

  </html>

4. Чего стоит опасаться:

1.Связка с PHP не заработала с первого раза. Пришлось искать логи, которые нашлись  тут:

 /var/log/apache2/.

 2. Если скрит работает нормально из консоли, но при этом через веб-морду не заработал, то есть несколько альтернатив:

  • Изменить права для доступа на устройство: sudo chmod 666 /dev/tty
  • Более культурный вариант – изменение прав в /etc/udev/rules.d где-то до такого вида () потребуется перезагрузка

 # navigate to rules.d directory
cd /etc/udev/rules.d
#create a new rule file
sudo touch my-newrule.rules
# open the file
sudo vim my-newrule.rules
# add the following
KERNEL==”tty…”, MODE=”0666″

  • Добавление пользователя в группу dialout на уровне индейца

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

 Что уж, решение совершенно дебильное, но тем не менее, рабочее.

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

PS А Rockets & Bishops – еще одно отличное пойло от пивоварни имени анархиста.

What’s your Reaction?
+1
0
+1
0
+1
0

By root

In Unix-like computer OSes (such as Linux), root is the conventional name of the user who has all rights or permissions (to all files and programs) in all modes (single- or multi-user). Alternative names include baron in BeOS and avatar on some Unix variants. BSD often provides a toor ("root" written backward) account in addition to a root account.
Regardless of the name, the superuser always has a user ID of 0. The root user can do many things an ordinary user cannot, such as changing the ownership of files and binding to network ports numbered below 1024.