» » » Zyxel Keenetic 4G, arduino и датчики температуры ds18b20

 

Zyxel Keenetic 4G, arduino и датчики температуры ds18b20

Автор: admin от 11-04-2012, 13:34, посмотрело: 4123

Zyxel Keenetic 4G, arduino и датчики температуры ds18b20 Привет Хабрахабр! Хочу поделится с вами как я подключил Arduino к своему роутеру. Поехали!
Современные роутеры — как небольшие компьютеры, которые выполняют узкоспециализированную задачу для раздачи сетевого трафика. На борту такого небольшого устройства установлена ОС Linux, только без графического интерфейса и с урезанной программной частью. Передо мной встал вопрос, а почему бы не подключить arduino к своему роутеру — Zyxel Keenetic 4G? Немного погуглив я наткнулся на замечательный форум, где энтузиасты собирают модифицированные прошивки с поддержкой установки дополнительных, пакетов для серии Keenetic.
В нашем случае управление Arduino происходит через библиотеку php_serial.class.php и легкого веб сервера на основе Lighttpd + php. С помощью этих инструментов будем подавать команды ардуинке на чтение показаний с двух температурных датчиков (дом, улица), записывать ответ в базу данных Sqlite3 и выводить на нашу веб-страничку.

Подготовка маршрутизатора

Первым делом, необходимо настроить наш маршрутизатор. У Zyxel Keenetic 4G очень маленькая внутренняя память, поэтому приобретете простенький usb-хаб и флешку не большого объема. Все тонкости настройки я не буду расписывать, а лишь поделюсь необходимыми ссылками. Сразу приготовитесь к долгой и утомительной процедуре.

  • Альтернативная прошивка (обсуждение). Система opkg для установки дополнительных пакетов. (читаем внимательно WIKI, там все расписано)

  • Устанавливаем Sqlite3 командой opkg install , где полный путь к пакету. Все необходимые пакеты берем здесь.

  • Устанавливаем и настраиваем Lighttpd и php.


  • Подключение датчиков

    Подключаем температурные датчики ds18b20 к arduino. Номинал резисторов — 4,7 кОм
    Zyxel Keenetic 4G, arduino и датчики температуры ds18b20
    Скетч

    Заливаем скетч. За основу взят код из этого урока и немного доработан под нашу задачу.
    #include

    int nc;
    OneWire  ds(10);  // Первый датчик
    OneWire  ds2(11);  // Второй датчик
    byte addr[8];
    byte addr2[8];

    void setup(void)
    {
      Serial.begin(9600);
      ds.search(addr);
      ds2.search(addr2);
    }

    void loop(void)
    {
      byte i;
      byte present = 0;
      byte data[12];
      int Temp;
      int znak;

      if (Serial.available() > 0) {
        nc = Serial.read();
        if (nc==1) {
        ds.reset();
        ds.select(addr);
        ds.write(0x44,1);    

        present = ds.reset();
        ds.select(addr);
        ds.write(0xBE);      

        for ( i = 0; i < 9; i++) {
          data[i] = ds.read();
        }

        Temp=(data[1]<<8)+data[0];
        Temp=Temp;
        znak=((Temp%16)*100)/16;
        if (znak<0){
          znak=znak*-1;
        }
        Serial.print(Temp/16);
        Serial.print(".");
        Serial.print(znak);
        Serial.println();
      }

    if (nc==2) {
        ds2.reset();
        ds2.select(addr2);
        ds2.write(0x44,1);
        present = ds2.reset();
        ds2.select(addr2);
        ds2.write(0xBE);      

        for ( i = 0; i < 9; i++) {
          data[i] = ds2.read();
        }
        Temp=(data[1]<<8)+data[0];
        Temp=Temp;
        znak=((Temp%16)*100)/16;
        if (znak<0){
          znak=znak*-1;
        }
        Serial.print(Temp/16);
        Serial.print(".");
        Serial.print(znak);
        Serial.println();
      }
    }
    }

    Передаем команды, принимаем ответы

    Скетч принимает две команды — «1» и «2». Для того что бы отправлять команды в Arduino, я использовал обработку кнопок на java script при помощи известной библиотеки Jquery. На моей страничке находятся 2 кнопки и 2 табличных поля в которые выводятся значения с температурных датчиков(см. index.php). При помощь метода POST, скрипт обращается к arduino.php и передает значения наших команд. Здесь происходит передача команд непосредственно в Arduino и чтение ответа в виде температуры, а так же запись в базу данных Sqlite3 (см. arduino.php). Файл readbd.php нужен для первоначального занесения данных температуры в табличку. Красивое оформление кнопок было позаимствовано из статьи «3D кнопки с помощью CSS3».

    index.php:








    Температура в доме и на улице









       <h1>Температура</h1>




    <table  width="60px" border="0"><tr>
    <td>[leech=#]Улица[/leech]</td>
    <td>[leech=#]Дом[/leech]</td>
    </tr><tr>
    <td class="c1"></td>
    <td class="c1"></td>
    </tr>
    </table>








    arduino.php:


    Проблемы, с которыми я столкнулся

  • Arduino в маршрутизаторе определялся как /dev/ttyACM0, а не /dev/ttyUSB0.

  • После того как php был написан, постоянно выскакивала ошибка — No stty availible, unable to run.», E_USER_ERROR.

  • При отсылке команд Arduino постоянно перезагружался.


  • Решения

  • Так как Веб сервер у меня установлен на флешке, в своем php скрипте нужно правильно указать путь к устройству. Так же установите права 777 на /dev/ttyACM0 или /dev/ttyUSB0 (зависит от Arduino).
    deviceSet("/../../../../dev/ttyACM0");

  • В php_serial.class.php убрал кусок кода:
    if($this->_exec("stty --version") === 0)
    {
    register_shutdown_function(array($this, "deviceClose"));
    }
    else
    {
    trigger_error("No stty availible, unable to run.", E_USER_ERROR);
    }

  • После заливки скетча в Arduino между пинами GND и Reset ставим конденсатор на 22 мФ. Это предотвращает перезагрузку во время приема команд.


  • Пару фоток

    Zyxel Keenetic 4G, arduino и датчики температуры ds18b20

    Zyxel Keenetic 4G, arduino и датчики температуры ds18b20

    Скачать все необходимые файлы одним архивом

    P.S.

    Это лишь небольшой пример того, как можно использовать arduino в связке с роутером. Можно написать более серьезные вещи. Управлять любыми приборами в своем доме при помощи веб-интерфейса и Arduino.

    Спасибо за инвайт НЛО!



    Источник: Linux

    Категория: Операционные системы » Linux

    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *