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

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

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

    Здравствуйте, как с вами связаться ? Есть предложение по расширению этой статьи. Личка на сайте отключена.

    1 ответ Последний ответ
    0
    • B Не в сети
      B Не в сети
      blblbl2
      написал в отредактировано
      #5

      jabber blblbl@dukgo.com. или vk.com/a.s.savchenko

      1 ответ Последний ответ
      0
      • 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
                          • Категории
                          • Главная
                          • Документация
                          • Последние
                          • Пользователи