Как да използвате 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
Възможно е; по подразбиране обаче ще трябва да анкетирате от клиента (и така ще има забавяне, равно на вашия интервал на запитване; това е естеството на web/http без използване на websockets или някакво друго решение. (С websockets , би било възможно да се избегне анкетирането, но това ще изисква малко повече крива на обучение). Имайте предвид, че ако поставите coin.txt в html директория, можете просто да получите директен достъп до него (ако приемем, че разрешенията са зададени по подходящ начин) - person Foon; 02.03.2015
comment
Здравей Foon, успях да запиша броя на монетите в текстовия файл за всяка поставена монета. Благодаря ти! Сега се опитах да прочета текста от моята php страница: ‹?php $myfile = fopen(coin.txt, r) or die(Не може да се отвори файл!); ехо fgets($myfile); fclose($myfile); ?› И работи, но само за едно четене. Опитах да го зацикля и спря да работи. Разбрах, че php няма да спре да цикли и страницата ми няма да завърши зареждането. Бихте ли случайно имали някакъв пример за използване на Ajax за четене на файла в цикъл? Благодаря ви много за вашата помощ! - person Yvette; 02.03.2015
comment
techoctave.com/c7/posts/ (Бих предложил да започнете с техния първи пример, като приемем, че браузърът ви работи или на RPi, или поне на система, която е в същата LAN мрежа като RPi) - person Foon; 02.03.2015