Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Блоги сообщества Raspberry Pi
  3. Запись времени захода в комнату или простой пример работы с прерываниями по GPIO на Python

Запись времени захода в комнату или простой пример работы с прерываниями по GPIO на Python

Запланировано Прикреплена Закрыта Перенесена Блоги сообщества Raspberry Pi
15 Сообщения 2 Posters 315 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано
    #6

    Здравствуйте. я в программировании чайник без ручки. подскажите как написать программу на питоне чтобы при нуле или 1(без разницы) на gpio порт к примеру 17 открывалась ссылка на сайт.

    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано pi
      #7

      Попробуйте следующий вариант:

      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 порту будет единица

      1 ответ Последний ответ
      0
      • piP Не в сети
        piP Не в сети
        pi
        написал в отредактировано pi
        #8

        добрый день! Такая же ситуация только разбираюсь как работать с GPIO. Задача состоит в том чтобы при срабатывании контактных датчиков (через оптопары) на Localhost отправлялась следующее: Например сработал Pin 17 т.е на нем 1 (или другой контакт всего их задействовано 4 (это датчики положения ворот открыто/закрыто а также кнопки открыть закрыть) то отправится должно:

        GET/objects/object=sensorMovement2&op=m&m=statusChanged&status=%i HTTP/1.0",
        

        Это для управления сценариями в системе MajorDoMo все варианты перепробовал но знаний не хватает…

        1 ответ Последний ответ
        0
        • piP Не в сети
          piP Не в сети
          pi
          написал в отредактировано
          #9

          Для практики хорошая адача, но по-делу, стоимость велокомпьютера 300-450 руб и их так много…

          1 ответ Последний ответ
          0
          • piP Не в сети
            piP Не в сети
            pi
            написал в отредактировано
            #10

            Запросы можно осуществлять при помощи библиотеки urllib

            1 ответ Последний ответ
            0
            • piP Не в сети
              piP Не в сети
              pi
              написал в отредактировано
              #11

              А есть программа наподобие ArduBloсk но для малинки?

              1 ответ Последний ответ
              0
              • piP Не в сети
                piP Не в сети
                pi
                написал в отредактировано pi
                #12

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

                10.12.2016 18:32:35 Закрытие
                10.12.2016 18:33:03 Закрытие
                10.12.2016 18:33:32 Закрытие
                10.12.2016 18:33:33 Закрытие
                

                никто не сталкивался с таким?

                1 ответ Последний ответ
                0
                • piP Не в сети
                  piP Не в сети
                  pi
                  написал в отредактировано
                  #13

                  Возможно, наводки или дребезг контактов. Добавьте побольше пинов в input_pins и поэкспериментируйте с различными значениями debounce_timeout_ms.

                  1 ответ Последний ответ
                  0
                  • piP Не в сети
                    piP Не в сети
                    pi
                    написал в отредактировано pi
                    #14

                    так и не получилось, играя со значениями, добиться нужного результата… пришлось применить немного говнокода 😄
                    может кому пригодится, у кого геркон будет так же «дрибезжать». возможно проблема в нем, надо попробовать другой поставить.
                    цель была оповещать когда произойдет открытие.

                    #!/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() # Ждем прихода прерывания.
                    
                    1 ответ Последний ответ
                    0
                    • piP Не в сети
                      piP Не в сети
                      pi
                      написал в отредактировано pi
                      #15

                      SystemError: This module can only be run on a Raspberry Pi! https://github.com/metachris/RPIO/issues/53

                      1 ответ Последний ответ
                      0

                      • Войти

                      • Нет учётной записи? Зарегистрироваться

                      • Login or register to search.
                      • Первое сообщение
                        Последнее сообщение
                      0
                      • Категории
                      • Главная
                      • Документация
                      • Последние
                      • Пользователи