Station M2 号称超强娱乐·极客主机,拥有无限玩法,那就当个电视盒子,或者就跑个Ubuntu多系统啥的,还不够极客。
经过简单摸索,操控GPIO点灯成功,下面实例讲解。

一、无头主机:
首先,请参考我的上一篇文章,把Station M2打造成 开发人员专用最强便携小主机(点击查看)
当然,不这样也可以,只是这样感觉比较方便比较酷。
poYBAGHIbIGAOTv9AAGjoZZpnqI942.jpg



二、拆机
然后,参考李工的 https://bbs.elecfans.com/jishu_2222549_1_1.html ,把 Station M2 给拆了。
对,就是拆了,不拆了,怎么叫极客!!!实际上是,不拆,我们怎么用主板上的接口啊:)

拆完后,别的也不要了,我们就要这个主板就好了。
主板正面:
pYYBAGHIbJqADT_UAAZZ42UKJ6U616.png

主板背面:
poYBAGHIbK6ACK0zAAcuRciE7-U673.png


虽然我是直接硬猜的,但是建议新手,一定要仔细看李工的帖子,细心点,别把WIFi天线或者其他的给拽断了。拆完的壳子啊,螺丝啊,也别像我一样不要了,保存好。

三、认识接口:
既然要控制GPIO点灯,我偏方就要知道,板子上的GPIO在哪里:
pYYBAGHIbQeAXCSmAAaNpv4-qKY229.png
就在板子正面的这个位置,从右往左数,一共有30个针脚,上单下双。
不过,这些针脚,不是所有的都能被我们使用的,因为有的针脚已经安排了特定的功能,有的针脚是复用的(有其他作用,也可以被用作GPIO控制)。



我们再看看板子背面:
pYYBAGHIbSeAKz7EAAcsEwYyCFk916.png
从对应的小字,我们可以看到,这些针脚,都被安排了不同的功能。
他们具体对应的功能,如下图所示:
poYBAGHIbV2ASp-TAAJKeRLZ6sU793.png

在上面的接口定义中,标注了GPIO的,才能用作GPIO口,如GPIO4_C4。

四、接线:
因为这个实例,使用了一颗三色LED,需要三个GPIO口,所以我们选用的GPIO口如下:
10号:GPIO4_C4,将对应三色LED红色,R
19号:GPIO4_C5,将对应三色LED绿色,G
20号:GPIO4_C6,将对应三色LED蓝色,B
三色LED具体如下:
pYYBAGHIbtWAYvfPAAFSzqRjgC024.jpeg.jpg

实际的接线如下:
poYBAGHIbvyAaMCgAAtOWuYTmZ4342.png

注意,主板上面的针脚接口,使用的是2.0间距的接口。
我们通常用的2.54间距的接口,可能会比较松。
在这个案例中,我们使用的是三色LED,所以用了三个GPIO接口。
如果你用的是单色LED,那么只用一个接口即可。

关于GPIO控制和定义的官方文档,可以查看:
https://wiki.t-firefly.com/zh_CN/ROC-RK3566-PC/driver_gpio.html

五、GPIO基础控制:
在官方的例子里面,要使用C语言编程,这,这,这太复杂了。
做为极客,我们要用python语言编程控制点灯。
在使用python语言编程控制之前,我们先来个最简单的,用shell脚本控制。

用shell脚本控制也能控制GPIO点灯?
没说错吧?
对,没错,用shell脚本也能控制GPIO,极客就是这么玩的。
在Linux系统下,一切外部设备,都可以通过sysfs接口操作。
而GPIO接口,被系统定义为了/sys/class/gpio/,所有可以操作的GPIO口,都在这个下面。
在实际使用前,我们有一点需要计算一下。
上面的GPIO4_C4,只是一个标识,并不是最终我们可以操控的GPIO端口号。
这里有一个计算过程:
ROC-RK3566-PC 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:

  • <div>GPIO pin脚计算公式:pin = bank * 32 + number</div><div>GPIO 小组编号计算公式:number = group * 8 + X</div>

[color=rgb(51, 102, 153) !important]复制代码




我们分解GPIO4_C4:
GPIO:标识GPIO接口
4:表示第4 bank位的接口,我们记为bank=4
C:表示上述bank下的C组,通常为ABCD,分别对应:A-0,B-1,C-2,D-3,我们记为group=2
4:表示该group下的第4个接口,我们记为X=4
那么,根据前面的公示:


  • bank=4
  • group=2
  • X=4
  • number = group * 8 + X = 20
  • pin = bank * 32 + number = 148

[color=rgb(51, 102, 153) !important]复制代码


也就是说,我们实际要操作的GPIO端口号,是148号端口。
现在,我们试一试,看看到底管用不管用。
首先,我们通过系统菜单,打开xterm,在shell中操作后续的shell指令
poYBAGHIhKaAV-ZsAAL_SH1soOg208.png


然后,要激活和设置148号GPIO端口,然后写入1输出高电平


  • <div><div>echo 148 右箭头 /sys/class/gpio/export</div></div><div><div>echo out 右箭头 /sys/class/gpio/gpio148/direction</div></div><div><div>echo 1 右箭头 /sys/class/gpio/gpio148/value</div></div>

[color=rgb(51, 102, 153) !important]复制代码




如果我们前面已经连接好了LED到正确的端口,那么此时,你就会看到,LED被点亮。
如果是三色LED,那么红色将被点亮。
再写入0输出低电平:


  • echo 0 右箭头 /sys/class/gpio/gpio148/value

[color=rgb(51, 102, 153) !important]复制代码



三色LED的红色将会熄灭。

上面的操作步骤,就是将148号GPIO端口设置为输出模式,然后通过写入1或者0,来点亮或者熄灭LED。

使用同样的方法,我们计算GPIO4_C5为149号GPIO端口,GPIO4_C6为150号GPIO端口,并且进行对应的设置操作,再写入1或者0,并观察实际操作。

如果LED没有变化,请仔细检查接线是否对应正确,接口是否松动。

这个部分的具体操作,可以查看附件中的:led_pin.sh,来进项详细的了解。
poYBAGHIfx-AXLPWAATNX0POT6U172.png


六:使用SHELL完成三色LED交替跑马灯:
上一步,我们完成了通过sysfs接口操作gpio端口,那么,我们就可以通过简单的shell脚本,来控制三色LED了。
因为涉及到编程了,所以我们可以使用本文开头提到的 开发人员专用最强便携小主机 中安装的vscode来进行。
poYBAGHIhgGAKBDWAAEsdVARKtw992.png

具体脚本如下:具体内容,请查看附件led_loop.sh

pYYBAGHIf2eASbbtAAQaskRtxqk806.png
上述脚本比较简单,i循环从1到1000,然后取3的模,来分别熄灭其他LED,点亮当前该点亮的LED。
其中,seq m n表示生成一个从m到n的数字序列(包括m n)


运行前,我们需要检查,148、149、150是否已经被设置为输出状态了。
可以通过以下指令查看:
poYBAGHIgPyALeEhAAFag6Kqur0207.png
如果没有,就需要进行设置:
poYBAGHIgJOAVdF0AAFnajnDWcs453.png

运行后,会输出当前控制的状态,包括index、pin、color
pYYBAGHIgUaAUMYKAAEl-q__RV8193.png

三色LED的具体效果,可以查看本文结尾的视频:查看

特别注意:
以上shell的操作,如果在firefly用户下,无法正常操作,那么久需要使用root用户进行,通过sudo su -来切换到root用户。


七、使用Python语言编程控制三色LED
终于,到了让Python大显身手的时刻了,作为一名极客,怎么能够不使用Python呢。
在使用Python进行控制之前,我们需要先安装对应的python扩展库,具体操作如下:
pYYBAGHIgpaAa3nyAAFp3MUktto697.png
然后,我们就可以使用python来进行操控了。
具体的python脚本如下:
pYYBAGHIgxKAdPMWAANSnPgZ9Do169.png
这个python脚本也比较简单,其逻辑和shell脚本是一致的。
其中需要说明的几点:
1. 引入gpio模块:import gpio as GPIO
2. 生成数字序列:range(m,n+1),会生成从m到n的数字序列(包括m和n)
3. 设置gpio端口的模式:GPIO.setup(pin, mode),mode可以为GPIO.OUT输出,也可以为GPIO.IN输入
4. 输出电平:GPIO.output(pin, value),value可以为0或者1,也可以为GPIO.HIGH或者GPIO.LOW

执行后,具体输出如下:
pYYBAGHIhhKARUXRAAMNNx7hn2c285.png

八:实际效果
最后我们来看一下实际的视频效果:查看



Station M2 不愧为超强娱乐·极客主机,不只是玩玩而已,还能进行开发,拥有无限玩法,当真是我的板子我做主!!!