Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Интерфейсы

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2015, 02:03   #1
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Шаблон веб-интерфейса

Это простейший вариант, в дальнейшем буду добавлять функционал.

Понажимать можно здесь.



Требования:
Любой сервер с поддержкой php, например Lighttpd и сам PHP.


Ардуина подключается либо к USB, либо к UART, кому как удобнее.

Описание на примере usb и ардуино nano.

Установим драйвера для разных ардуин и утилиту для настройки порта stty:

PHP код:
opkg update 
PHP код:
opkg install kmod-usb-serial-ftdi kmod-usb-acm kmod-usb-serial-pl2303 kmod-usb-serial-cp210x libftdi coreutils-stty 

Устанавливаем и настраиваем небольшой прокси-сервер ser2net, он создаёт соединение между сокетом и устройством (/dev/ttyUSB0).
PHP код:
opkg install ser2net 
Редактируем файл конфигурации:
PHP код:
nano /etc/ser2net.conf 
Закомментируйте всё строчки в конце и сохраните.

Добавим ser2net и stty в автозагрузку:
PHP код:
nano /etc/rc.local 
Должно получится так:
PHP код:
stty -/dev/ttyUSB0 cs8 57600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl

ser2net 
-"3002:raw:0:/dev/ttyUSB0:57600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS"

exit 
Строки инициализации должны быть записаны одной строкой (без переноса).

В примере используется устройство /dev/ttyUSB0, у Вас может быть другое! (ttyATH0 — консоль, ttyACM0 — мега)

Если подклюаете к UART, то надо подправить файл /etc/inittab, закомментировав последнюю строчку:

PHP код:
nano /etc/inittab 
Вот так:

PHP код:
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
#ttyATH0::askfirst:/bin/ash --login 
Проверить...
PHP код:
ls /dev/tty

.
.
.
Скачайте архив и распакуйте его в рабочую папку сервера, чтоб было так /var/www/primer/.
У Вас может быть другая рабочая папка.

Прошейте в ардуину этот скетч:
PHP код:
int descript[5];
int R1 0// флаг первой лампы D12
int R2 0// флаг второй лампы D13

void setup()  
{   
  
Serial.begin(57600);   
  
pinMode(12OUTPUT); 
  
pinMode(13OUTPUT);  
}  

void loop()  
{  
 if (
Serial.available()>4// ждём дескриптор и нужный символ
 
{
  if (
Serial.read()=='Y'// проверяем первый символ, если это 'Y', то продолжаем принимать, если нет, то выходим из цикла чтения 
   
{
    for (
byte i=05i++)
      {
         
descript[i] = Serial.read(); // добавляем символы в массив   
      

        
 if((
descript[0] =='+') && (descript[1] =='=') && (descript[2] =='Z')) // проверяем символы
  
{
   switch (
descript[3]) 
    {
      case 
'o'// обновление
      
glavnaia(); // отправка ответа
      
break;
      
      case 
'A':
      
digitalWrite(12HIGH);
      
R1 1// ставим флаг в единицу (вкл)
      
glavnaia();
      break;
      
      case 
'a':
      
digitalWrite(12LOW);
      
R1 0// ставим флаг в ноль (откл)
      
glavnaia();
      break;
      
      case 
'B':
      
digitalWrite(13HIGH);
      
R2 1;
      
glavnaia();
      break;
      
      case 
'b':
      
digitalWrite(13LOW);
      
R2 0;
      
glavnaia();
      break;
    
     }
   }
   
  else
    {
      for(
byte i=0255i++) 
       {
         
Serial.read();    
       } 
    } 
   }
// конец if (Serial.read()=='Y')
  
// конец чтение порта 
}

void glavnaia() // отправка ответа
 
{
      
Serial.print(R1); // отсылаем флаг 
      
Serial.print(",");  // запятая для парсинга строки
      
Serial.println(R2);  // отсылаем флаг !!!последняя строчка должна быть println!!!
 

Будем включать и выключать D12 и D13. Ардуина будет рапортовать о выполнении команды.

Прверить работу можно так:
Вкл
PHP код:
echo 'Y+=Za' > /dev/ttyUSB0 
Откл
PHP код:
echo 'Y+=Zb' > /dev/ttyUSB0 
Работа заключается в следующем: index.html раз в три секунды (интервал можно изменить) запрашивает данные у ардуины с помощью функции ajax (ajax позволяет не перегружать страницу). Запрос передаётся php-файлу (box2.php) находящемуся на сервере, который в свою очередь обращается к ардуине через сокет ser2net.

Для лучшего понимания откройте файлы index.html и box2.php из архива, и посмотрите комментарии.

В браузере заходим по аресу ваш_роутер/primer/

Должно получится так:



Если надпись stD серая, это значит что связь с ардуиной установлена, если красная, то связи нет.

Нажатие на лампочку отсылает в ардуину символ включения или отключения (в зависимости от состояния), ардуина выполняет действие и посылает в ответ строку с флагами состояния (единица или ноль). Ответ разбирается в html-странице и в зависимости от флагов выводит картинку лампочки.

Если открыть ещё одну страничку (или зайти с другого устройства) и включить лампочку, то на первой страничке (в течении 3 сек.) тоже включится лампочка. Для этого и нужно обновление.

Интервал меняется в index.html.

PHP код:
$(document).ready(function()
          {  
            
show();  
            
setInterval('show()',3000);  /* частота обновления */
          
}); 
На этом пока всё...

Последний раз редактировалось stD; 11.06.2015 в 18:33.
stD вне форума   Ответить с цитированием
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 10:37. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика