Как использовать WebIOPi на существующем веб-сайте

Я пытаюсь использовать WebIOPi, но совершенно не могу заставить его работать с моим проектом.

Предыстория: я использую Raspberry Pi B+ под управлением Wheezy. Я работаю над веб-приложением, доступ к которому будет осуществляться только локально. У меня есть куча файлов php в /var/www, которые работают на Apache. Теперь мне нужно подключить мой монетоприемник к проекту. Монетоприемник http://www.adafruit.com/products/787 посылает одиночные импульсы (I нужна только одна монета). Сначала я попробовал монетоприемник с помощью скрипта Python с использованием прерываний, и он отлично работает.

GPIO.setup(PIN_COIN_INTERRUPT,GPIO.IN)
GPIO.add_event_detect(PIN_COIN_INTERRUPT,GPIO.FALLING,callback=coinEventHandler)

Но теперь мне нужно иметь возможность фиксировать эти импульсы и отображать их на php-странице, обновляя сумму для каждой вставки монеты. Я часами изучаю WebIOPi, но могу найти информацию только о чтении статуса контакта, а не о прослушивании прерываний. Может ли кто-нибудь указать мне правильное направление?

Любая помощь будет принята с благодарностью. Благодарю вас!


person Yvette    schedule 01.03.2015    source источник


Ответы (1)


Итак, у вас, кажется, есть две проблемы: 1. как мне на сервере обнаружить новое событие монеты 2. как мне затем отправить это в клиентский браузер.

Я вообще не знаю webiopi, поэтому не могу сказать, что нет способа использовать это для решения обоих, но в качестве альтернативы:

Для части 1: у вас есть программа на Python, которая, как вы сказали, работает; Я бы предложил запустить в качестве фоновой службы и просто сделать что-то простое, например записать последнее значение чеканки в файл:

GPIO.setup(PIN_COIN_INTERRUPT,GPIO.IN)
GPIO.add_event_detect(PIN_COIN_INTERRUPT,GPIO.FALLING,callback=coinEventHandler)
def coinEvenHandler(*arguments):
 try:
   f = open("coin.txt","rt")
   cnt = int(f.read())
   f.close()
 except: # handle file doesn't exist and file doesn't contain an int
   cnt = 0
 f = open("coin.txt","wt")
 f.write(str(cnt))
 f.close()

Для части 2: 1. Создайте страницу, которая возвращает значение «coin.txt». 2. Используйте Ajax (например, jquery) для опроса этого значения с вашей клиентской страницы.

person Foon    schedule 01.03.2015
comment
Можно ли прочитать последнее значение coin.txt с помощью Ajax? К сожалению, у меня мало опыта работы с Ajax. Я должен убедиться, что каждый раз, когда человек вставляет монету, на странице клиента немедленно отображается обновленное значение. Я попробую это, как только вернусь домой. Благодарю вас! - person Yvette; 02.03.2015
comment
Это возможно; однако по умолчанию вам нужно будет опросить от клиента (и поэтому будет задержка, равная вашему интервалу опроса; это природа сети/http без использования веб-сокетов или какого-либо другого обходного пути. (С веб-сокетами , можно было бы избежать опроса, но это потребует немного больше обучения.) Обратите внимание, что если вы поместите файл coin.txt в каталог html, вы можете просто получить к нему прямой доступ (при условии, что разрешения установлены соответствующим образом) - person Foon; 02.03.2015
comment
Привет, Фун, мне удалось записать количество монет в текстовый файл для каждой вставленной монеты. Благодарю вас! Теперь я попытался прочитать текст со своей php-страницы: ‹?php $myfile = fopen(coin.txt, r) or die(Невозможно открыть файл!); эхо fgets($myfile); fclose ($ мой файл); ?› И это работает, но только для одноразового чтения. Я попытался зациклить его, и он перестал работать. Я понял, что php не перестанет зацикливаться, и моя страница не завершит загрузку. Может быть, у вас есть пример использования Ajax для чтения файла в цикле? Спасибо большое за вашу помощь! - person Yvette; 02.03.2015
comment
techoctave.com/c7/posts/ (я бы посоветовал начать с их первого примера, если ваш браузер либо работает на RPi, либо, по крайней мере, в системе, которая находится в той же локальной сети, что и RPi) - person Foon; 02.03.2015