14回答

4收藏

[原创] 简单的树莓派GPIO的图形控制程序

 

Raspberry Pi Raspberry Pi 23902 人阅读 | 14 人回复 | 2012-09-06

本帖最后由 GY@艳 于 2012-10-12 17:21 编辑

原帖由
ukonline2000


一个简单的树莓派GPIO的图形控制程序,这样就方便那些觉得敲命令比较麻烦的童鞋, 分享给大家吧,希望对大家有所帮助!



有了它,大家就可以简单的一开一关控制GPIO,甚至控制电器和小车一类的,当然最好是用扩展板
废话不说了,先上图吧!

1.使用方法,装好GPIO的库,参考这两个文章
https://www.cirmall.com/bbs/thread-1376-1-1.html
2.下载源程序demo.py,在终端中用root登录(输入su -)
demo.rar (1.29 KB, 下载次数: 269)


3.然后输入
python demo.py
记住需要在图形界面下


程序代码:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.6.3 on Thu Jul 19 15:47:52 2012
# design by ukonline2000 form
import wx

# begin wxGlade: extracode
import RPi.GPIO as GPIO
GPIO.setup(11,GPIO.OUT)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(15,GPIO.OUT)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
# end wxGlade



class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.label_2 = wx.StaticText(self, -1, "GPIO0")
        self.button_1 = wx.Button(self, -1, "ON")
        self.button_5 = wx.Button(self, -1, "OFF")
        self.label_3 = wx.StaticText(self, -1, "GPIO1")
        self.button_2 = wx.Button(self, -1, "ON")
        self.button_6 = wx.Button(self, -1, "OFF")
        self.label_4 = wx.StaticText(self, -1, "GPIO2")
        self.button_3 = wx.Button(self, -1, "ON")
        self.button_7 = wx.Button(self, -1, "OFF")
        self.label_5 = wx.StaticText(self, -1, "GPIO3")
        self.button_4 = wx.Button(self, -1, "ON")
        self.button_8 = wx.Button(self, -1, "OFF")        
        self.label_6 = wx.StaticText(self, -1, "GPIO4")
        self.button_9 = wx.Button(self, -1, "ON")
        self.button_10 = wx.Button(self, -1, "OFF")
        self.label_7 = wx.StaticText(self, -1, "GPIO5")
        self.button_11 = wx.Button(self, -1, "ON")
        self.button_12 = wx.Button(self, -1, "OFF")
        self.label_8 = wx.StaticText(self, -1, "GPIO6")
        self.button_13 = wx.Button(self, -1, "ON")
        self.button_14 = wx.Button(self, -1, "OFF")
        self.label_9 = wx.StaticText(self, -1, "GPIO7")
        self.button_15 = wx.Button(self, -1, "ON")
        self.button_16 = wx.Button(self, -1, "OFF")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.on0, self.button_1)
        self.Bind(wx.EVT_BUTTON, self.off0, self.button_5)
        self.Bind(wx.EVT_BUTTON, self.on1, self.button_2)
        self.Bind(wx.EVT_BUTTON, self.off1, self.button_6)
        self.Bind(wx.EVT_BUTTON, self.on2, self.button_3)
        self.Bind(wx.EVT_BUTTON, self.off2, self.button_7)
        self.Bind(wx.EVT_BUTTON, self.on3, self.button_4)
        self.Bind(wx.EVT_BUTTON, self.off3, self.button_8)        
        self.Bind(wx.EVT_BUTTON, self.on4, self.button_9)
        self.Bind(wx.EVT_BUTTON, self.off4, self.button_10)
        self.Bind(wx.EVT_BUTTON, self.on5, self.button_11)
        self.Bind(wx.EVT_BUTTON, self.off5, self.button_12)
        self.Bind(wx.EVT_BUTTON, self.on6, self.button_13)
        self.Bind(wx.EVT_BUTTON, self.off6, self.button_14)
        self.Bind(wx.EVT_BUTTON, self.on7, self.button_15)
        self.Bind(wx.EVT_BUTTON, self.off7, self.button_16)
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("Raspi GPIO Demo")
        self.SetSize((246, 330))
        self.label_2.SetMinSize((80, 40))
        self.label_2.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_1.SetMinSize((80, 40))
        self.button_5.SetMinSize((80, 40))
        self.label_3.SetMinSize((80, 40))
        self.label_3.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_2.SetMinSize((80, 40))
        self.button_6.SetMinSize((80, 40))
        self.label_4.SetMinSize((80, 40))
        self.label_4.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_3.SetMinSize((80, 40))
        self.button_7.SetMinSize((80, 40))
        self.label_5.SetMinSize((80, 40))
        self.label_5.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_4.SetMinSize((80, 40))
        self.button_8.SetMinSize((80, 40))
        self.label_6.SetMinSize((80, 40))
        self.label_6.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_9.SetMinSize((80, 40))
        self.button_10.SetMinSize((80, 40))
        self.label_7.SetMinSize((80, 40))
        self.label_7.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_11.SetMinSize((80, 40))
        self.button_12.SetMinSize((80, 40))
        self.label_8.SetMinSize((80, 40))
        self.label_8.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_13.SetMinSize((80, 40))
        self.button_14.SetMinSize((80, 40))
        self.label_9.SetMinSize((80, 40))
        self.label_9.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
        self.button_15.SetMinSize((80, 40))
        self.button_16.SetMinSize((80, 40))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_1 = wx.GridSizer(8, 3, 0, 0)
        grid_sizer_1.Add(self.label_2, 0, 0, 0)
        grid_sizer_1.Add(self.button_1, 0, 0, 0)
        grid_sizer_1.Add(self.button_5, 0, 0, 0)
        grid_sizer_1.Add(self.label_3, 0, 0, 0)
        grid_sizer_1.Add(self.button_2, 0, 0, 0)
        grid_sizer_1.Add(self.button_6, 0, 0, 0)
        grid_sizer_1.Add(self.label_4, 0, 0, 0)
        grid_sizer_1.Add(self.button_3, 0, 0, 0)
        grid_sizer_1.Add(self.button_7, 0, 0, 0)
        grid_sizer_1.Add(self.label_5, 0, 0, 0)
        grid_sizer_1.Add(self.button_4, 0, 0, 0)
        grid_sizer_1.Add(self.button_8, 0, 0, 0)
        grid_sizer_1.Add(self.label_6, 0, 0, 0)
        grid_sizer_1.Add(self.button_9, 0, 0, 0)
        grid_sizer_1.Add(self.button_10, 0, 0, 0)
        grid_sizer_1.Add(self.label_7, 0, 0, 0)
        grid_sizer_1.Add(self.button_11, 0, 0, 0)
        grid_sizer_1.Add(self.button_12, 0, 0, 0)
        grid_sizer_1.Add(self.label_8, 0, 0, 0)
        grid_sizer_1.Add(self.button_13, 0, 0, 0)
        grid_sizer_1.Add(self.button_14, 0, 0, 0)
        grid_sizer_1.Add(self.label_9, 0, 0, 0)
        grid_sizer_1.Add(self.button_15, 0, 0, 0)
        grid_sizer_1.Add(self.button_16, 0, 0, 0)
        sizer_1.Add(grid_sizer_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade

    def on0(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 0 is ON!"
        GPIO.output(11,True)
        event.Skip()

    def off0(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 0 is OFF!"
        GPIO.output(11,False)
        event.Skip()


    def on1(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 1 is ON!"
        GPIO.output(12,True)
        event.Skip()

    def off1(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 1 is OFF!"
        GPIO.output(12,False)
        event.Skip()

    def on2(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 2 is ON!"
        GPIO.output(13,True)
        event.Skip()

    def off2(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 2 is OFF!"
        GPIO.output(13,False)
        event.Skip()

    def on3(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 3 is ON!"
        GPIO.output(15,True)
        event.Skip()

    def off3(self, event): # wxGlade: MyFrame.<event_handler>
        print "GPIO 3 is OFF!"
        GPIO.output(15,False)
        event.Skip()

    def on4(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 4 is ON!"
        GPIO.output(16,True)
        event.Skip()

    def off4(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 4 is OFF!"
        GPIO.output(16,False)
        event.Skip()

    def on5(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 5 is ON!"
        GPIO.output(18,True)
        event.Skip()

    def off5(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 5 is OFF!"
        GPIO.output(18,False)
        event.Skip()

    def on6(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 6 is ON!"
        GPIO.output(22,True)
        event.Skip()

    def off6(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 6 is OFF!"
        GPIO.output(22,False)
        event.Skip()

    def on7(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 7 is ON!"
        GPIO.output(7,True)
        event.Skip()

    def off7(self, event):  # wxGlade: MyFrame.<event_handler>
        print "GPIO 7 is OFF!"
        GPIO.output(7,False)
        event.Skip()

# end of class MyFrame


if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MyFrame(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()

爱板  爱板  爱板     https://www.cirmall.com
分享到:
回复

使用道具 举报

回答|共 14 个

倒序浏览

沙发

fengye5340-272571

发表于 2012-9-26 19:13:27 | 只看该作者

感谢楼主分享,赞一个!
板凳

medreams

发表于 2012-12-23 15:11:56 | 只看该作者

提示这个是欠什么?
  1. File "demo.py", line 5, in <module>
  2.     import wx
  3. ImportError: No module named wx
复制代码
地板

GY@艳

发表于 2012-12-24 08:32:27 | 只看该作者

medreams 发表于 2012-12-23 15:11
提示这个是欠什么?

感谢你的解答啊
爱板  爱板  爱板     https://www.cirmall.com
5#

medreams

发表于 2012-12-24 09:26:58 | 只看该作者

  1. apt-get install python-wxtools
复制代码
6#

牧羊月月

发表于 2013-4-19 18:15:07 | 只看该作者

请问您这里设置的GPIO11,12-18,还有GPIO18,22和7是根据revision 1还是revision 2的GPIO呢?因为我在rev 2的图上对应不上某些pin..
7#

dennystc

发表于 2013-7-7 20:56:59 | 只看该作者

我这个地方在做的时候遇到几个问题。我大概讲一下体会。
开始的时候我用user guide里面的IO控制方法是可以的(详见官方版的user guide),说明硬件没有问题,但是用这个demo是有问题的。
1. 缺少 wx的 load module ,后来自己安装了一个。
2. 关于IO的编号其实有两种mode,一种是BCM,一种是BOARD。需要做setup。如果是BCM,就看是GPIO的编号;如果是BOARD,IO编号就是指位置的编号。
3. 这个demo.py里面没有设置mode,楼主你确定能准确的run起来吗?

另外,有没有群什么的可供交流?谢谢。
8#

GY@艳

发表于 2013-7-8 08:31:54 | 只看该作者

dennystc 发表于 2013-7-7 20:56
我这个地方在做的时候遇到几个问题。我大概讲一下体会。
开始的时候我用user guide里面的IO控制方法是可以 ...

问题已经收到了,我不太懂,已经帮你找了专业人士解决,请耐心等待。
爱板  爱板  爱板     https://www.cirmall.com
9#

ukonline2000

发表于 2013-7-8 10:21:26 | 只看该作者

dennystc 发表于 2013-7-7 20:56
我这个地方在做的时候遇到几个问题。我大概讲一下体会。
开始的时候我用user guide里面的IO控制方法是可以 ...

这个demo是去年写的了,但是的GPIO库版本较低,不需要这么多mode配置,现在要使用新版本的RPI.GPIO库的话,需要修改一下demo才行
博客站点:http://ukonline2000.com
网店:http://ukonline2000.taobao.com
10#

dennystc

发表于 2013-7-8 13:21:35 | 只看该作者

么有关系哈,因为我改了以后可以run了,所以就确认一下,因为mode 的设置与否确实效果不同。。。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条