树莓派论坛

 找回密码
 立即注册

树莓派无线控制开关,python实现版

Winston 发表于 2014-5-30 11:37:34 | 显示全部楼层 |阅读模式
http://www.shumeipai.net/thread-7315-1-1.html
看了上面这个帖子,认真研究了原版RC-Switch后,决定用python实现该代码。但在使用中发现python自带得sleep函数不能提供微妙级的延时,所以加载了c库中的usleep()微妙级延时函数。
硬件连接见原帖,调用方法:
    python send.py FFFFFFFFFFF0  打开
    python send.py FFFFFFFFFFFF  关闭

该代码仅实现了发射功能,接收功能由于手头没模块,没有写。
py315M.rar (10 KB, 下载次数: 13)   源码下载
如果不能解压,将文件后缀改为tar

具体代码如下:
pyswitch.py
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. import RPi.GPIO as GPIO
  4. import time
  5. import ctypes

  6. GPIO.setwarnings(False)

  7. class pySwitch(object):
  8.   def __init__(self,nPulseLength=350,nRepeatTime=10):
  9.     self.nPulseLength=nPulseLength
  10.     self.nRepeatTime=nRepeatTime
  11.   def enableSend(self,nSendPin):
  12.     self.nSendPin=nSendPin
  13.     GPIO.setmode(GPIO.BOARD)
  14.     GPIO.setup(self.nSendPin,GPIO.OUT)
  15.   def disableSend(self,nSendPin):
  16.     self.nSendPin=-1
  17.     GPIO.cleanup()
  18.   def send(self,sSendCode):
  19.     nRepeat=0
  20.     while(nRepeat<self.nRepeatTime):
  21.       for i in range(len(sSendCode)):
  22.         if sSendCode[i]=="0":
  23.           self.send0()
  24.         elif sSendCode[i]=="1":
  25.           self.send1()
  26.         elif sSendCode[i]=="F":
  27.           self.sendF()
  28.         else:
  29.           print 'undefine'
  30.       self.sendSync()
  31.       nRepeat=nRepeat+1
  32.   def send0(self):
  33.     self.transmit(1,3)
  34.     self.transmit(1,3)
  35.   def send1(self):
  36.     self.transmit(3,1)
  37.     self.transmit(3,1)
  38.   def sendF(self):
  39.     self.transmit(1,3)
  40.     self.transmit(3,1)
  41.   def sendSync(self):
  42.     self.transmit(1,31)
  43.   def transmit(self,nHighPulse,nLowPulse):
  44.     if self.nSendPin!=-1:
  45.       cUsleep=ctypes.CDLL("./libpysleep.so")
  46.       GPIO.output(self.nSendPin,GPIO.HIGH)
  47.       cUsleep.pysleep(nHighPulse*self.nPulseLength)
  48. #      time.sleep(0.000001*nHighPulse*self.nPulseLength)
  49.       GPIO.output(self.nSendPin,GPIO.LOW)
  50.       cUsleep.pysleep(nLowPulse*self.nPulseLength)
  51. #      time.sleep(0.000001*nLowPulse*self.nPulseLength)
复制代码
send.py
  1. #!/usr/bin/env python
复制代码
树老大 发表于 2014-5-30 11:52:52 | 显示全部楼层
前来支持一个。
doubleoseven 发表于 2016-3-5 11:30:43 | 显示全部楼层
兄弟,主要是接收硬件模块。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )