Запись времени захода в комнату или простой пример работы с прерываниями по GPIO на Python
-
Здравствуйте. я в программировании чайник без ручки. подскажите как написать программу на питоне чтобы при нуле или 1(без разницы) на gpio порт к примеру 17 открывалась ссылка на сайт.
-
Попробуйте следующий вариант:
import rpio import webbrowser RPIO.add_interrupt_callback(17, webbrowser.open("http://raspberrypi.ru"),pull_up_down=RPIO.PUD_DOWN, debounce_timeout_ms=50, edge='rising') RPIO.wait_for_interrupts()
Ссылка откроется когда на 17 порту будет единица
-
добрый день! Такая же ситуация только разбираюсь как работать с GPIO. Задача состоит в том чтобы при срабатывании контактных датчиков (через оптопары) на Localhost отправлялась следующее: Например сработал Pin 17 т.е на нем 1 (или другой контакт всего их задействовано 4 (это датчики положения ворот открыто/закрыто а также кнопки открыть закрыть) то отправится должно:
GET/objects/object=sensorMovement2&op=m&m=statusChanged&status=%i HTTP/1.0",
Это для управления сценариями в системе MajorDoMo все варианты перепробовал но знаний не хватает…
-
Для практики хорошая адача, но по-делу, стоимость велокомпьютера 300-450 руб и их так много…
-
Запросы можно осуществлять при помощи библиотеки urllib
-
А есть программа наподобие ArduBloсk но для малинки?
-
Добрый вечер
попробовал сделать так же, но в логи почему то пишет часто состояние, я думал он писать только будет когда изменится статус.
10.12.2016 18:32:35 Закрытие
10.12.2016 18:33:03 Закрытие
10.12.2016 18:33:32 Закрытие
10.12.2016 18:33:33 Закрытие
никто не сталкивался с таким? -
Возможно, наводки или дребезг контактов. Добавьте побольше пинов в input_pins и поэкспериментируйте с различными значениями debounce_timeout_ms.
-
так и не получилось, играя со значениями, добиться нужного результата… пришлось применить немного говнокода
может кому пригодится, у кого геркон будет так же «дрибезжать». возможно проблема в нем, надо попробовать другой поставить.
цель была оповещать когда произойдет открытие.#!/usr/bin/python # -*- coding: utf-8 -*- # import RPIO # Импортируем библиотеку RPIO import time # ...и для работы со временем import MySQLdb import gc #чистка мусора import requests import datetime from time import sleep close=0 input_pins = (18,19,20,21,22,23,24,25,26,27) # Задаем номера пинов, которые будут использоваться под ввод. Лучше внести в этот список побольше пинов, дабы избежать наводок. for i in xrange(len(input_pins)): # Включаем их на ввод и подтягиваем к земле RPIO.setup(input_pins[i], RPIO.IN, pull_up_down=RPIO.PUD_DOWN) def write_door_state(gpio_id, val): # Создаем функцию, запускаемую при изменении состояния GPIO dat=datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S") if val==0: global close if close==0: close=1 try: db = MySQLdb.connect(host="localhost",user="log",passwd="pas",db="1") except: print "connection failed" door = open('/home/pi/project/door', 'w', 0) door.write (time.strftime("0 "+"%Y-%m-%d %H:%M:%S")+"\tОткрытие\r\n") #\t - символ табуляции, \r\n - перевод строки try: cursor = db.cursor() sql = """insert into door (bool,date,name) values ('%(val)s','%(date)s','%(stat)s')"""%{"val":'0', "date":dat, "stat":'Open'} cursor.execute(sql) db.commit() cursor.close() time.sleep(5) # delays for 5 seconds except MySQLdb.Error as e: print "MySQL Error: %s" % str(e) else: db.close() gc.collect() door.close() requests.get("http://sms.ru/sms/send?api_id=блабла&to=номер&text=Door open!") time.sleep(60) # delays for 60 seconds else: door = open('/home/pi/project/door', 'w', 0) close=0 door.write (time.strftime("1 "+"%Y-%m-%d %H:%M:%S")+"\tЗакрытие\r\n") door.close() # Настраиваем порт на ожидание прерываний и выполнение выщенаписанной функции#Добавляем прерывание, с подтяжкой к земле и подавлением дребезга контактов RPIO.add_interrupt_callback(22, write_door_state,pull_up_down=RPIO.PUD_DOWN, threaded_callback=True, debounce_timeout_ms=50) RPIO.wait_for_interrupts() # Ждем прихода прерывания.
-
SystemError: This module can only be run on a Raspberry Pi!https://github.com/metachris/RPIO/issues/53