在上篇文章中《#玩转Galileo系列#如何在Linux系统中直接操作GPIO》讲述了找到Intel Galileo与Arduino IO之间如下的对应关系。
GPIO Digital I/O gpio11 pin0 gpio12 pin1 gpio13 pin2 gpio14 pin3 gpio6 pin4 gpio0 pin5 gpio1 pin6 gpio38 pin7 gpio40 pin8 gpio4 pin9 gpio10 pin10 gpio5 pin11 gpio15 pin12 gpio7 pin13
之前文章只是通过在Linux下写一个Python程序驱动了gpio,但是未详细说明其中细节,这里将对Galileo gpio的操作进行细分讲解。
Arduino在写程序时需对pinMode进行设置,然后再将其value设为high或者low,在这里,也是如此。
首先定义GPIO的方向(输入还是输出):
echo -n "out" > /sys/class/gpio/gpio7/direction
上面的命令将gpio7的方向定义为“out”,也就是输出,如果需要将其设为输入,则需要改成如下:
echo -n "in" > /sys/class/gpio/gpio7/direction
需注意的是,我采用的Galileo为Gen2,上图中“drive”模式不需要进行设置,在Gen1中则需要。
定义GPIO数值:
echo -n "1" > /sys/class/gpio/gpio7/value
如果上一步中的“direction”设置为“output”时,这里则将gpio7的值设为高,也就是说,此时,gpio7输出高电平,与其连接的LED此时将点亮。
>echo -n "0" > /sys/class/gpio/gpio7/value
同理,此时将gpio7电平设为低,与其连接的LED此时将熄灭。
如图所示通过“cat /sys/class/gpio/gpio15/direction”和"cat /sys/class/gpio/gpio15/value"命令查看gpio15的“direction”和“value”状态。
>cat /sys/class/gpio/gpio7/value
当然,除次之外,若将“direction”设为“in”则可通过查看“value”的值读取当前gpio的状态,电平为高还是低,可以作“Button”按钮使用。
最后,如果其他Uart、spi等复用gpio的情况发生,则需通过下述命令将上面的gpio7移除以便其他程序使用。
echo -n "7" > /sys/class/gpio/unexport
到这里,关于gpio的操作,主要集中在数字io的应用讲解完毕,之后的文档会讲解pwm和analogin的应用,不过鉴于Intel官方这类的文档较少,恐怕会耗费不少时间。
最后,大家有问题均可回复微信号与我交流,我将在下期统一解答。