NanoPi Fire3 也要支持OLED屏幕2
-
-
夕阳接你
- LV5工程师
-
| 2020-08-12 09:13:00
- 浏览量 378
- 回复:0
**继**续上一篇https://www.icxbk.com/report/detail?rid=401.html
说好的NanoHat OLED软件按键控制支持呢? 这不来了===》
## 1.按键开关原理图:
![](https://cf01.ickimg.com/bbsimages/202008/6f02bea29d44e23f5647cc54f3fc13ce.png)
简单分析:这按键检测的GPIO是通过电阻接地,默认下拉。K1,k2,k3 按下键时GPIO电平为VCC_3.3V 拉高,系统检测到按键。这是10K电阻起到控制电流防止短路,实现GPIO电压升降控制。10nF的电容起到了按键时消除电压抖动作用,从硬件上以防止按键多次触发。
NanoHat OLED 适配是NanoPi NEO 系列使用GPIOA0,GPIOA2 GPIOA3 作为按键检测口。
关键在于NanoPi Fire3 并没有拉出GPIO针脚,而是作为LCD接口使用
![](https://cf01.ickimg.com/bbsimages/202008/a87ae7df7803f33c9feb367cfbb3564c.png)
没办法只能使用现有的GPIO接口,这里就选择GPIOB30 GPIOB31 GPIOB27作为按键检测口
![](https://cf01.ickimg.com/bbsimages/202008/61cdc698618d768111348372b5b9e2a7.png)
## 2.代码修改
由于修改GPIO的使用,代码按键GPIO定义部分也要做相应修改。
找到Git下载NanoHatOLED路径,查看代码:
*cd NanoHatOLED
cd Source
nano main.c*
找到定义GPIO代码如下:
```c
static int gpio_d0=0 gpio_d1=2 gpio_d2=3;
static int epfd=-1;
static int fd_d0=-1 fd_d1=-1 fd_d2=-1;
void sig_handler( int sig)
{
if(sig == SIGINT){
if (epfd>=0) {
close(epfd);
}
if (fd_d0>=0) {
close(fd_d0);
release_gpio(gpio_d0);
}
if (fd_d1>=0) {
close(fd_d1);
release_gpio(gpio_d1);
}
if (fd_d2>=0) {
close(fd_d2);
release_gpio(gpio_d2);
}
log2file("ctrl+c has been keydownd\n");
exit(0);
}
}
```
这里gpio_d0=0 gpio_d1=2 gpio_d2=3 是对应NanoPi NEO系列的GPIO定义
**那GPIO的值是怎么来的?**
查看SP6818 Datasheet中GPIO章节如下:
![](https://cf01.ickimg.com/bbsimages/202008/d3c90528962635288c7e377a41cb8d11.png)
GPIO有分为GPIOA GPIOBB GPIOC GPIOD GPIOE五组,每组有32个GPIO,每个GPIO对应一个控制bit位.
GPIO的值是依次从A组开始计算,那简单的总结出一个公式:
**GPIO_VALUE = (GPIO_GROUP - 0xA)x 32 + GPIO_NUMBER**
注:GPIO_GROUP 为十六进制,如果分组超出F,那就以字母顺序第N个,(N+0xA)计算.
以GPIOA3为例:(0xA - 0xA)x 32 + 3 = 3.
GPIOB30 = (0xB - 0xA)x 32 + 30 = 62
以此类推:GPIO31 = 63; GPIO27 = 59
修改代码
![](https://cf01.ickimg.com/bbsimages/202008/e72799f411386240b96b51ebcc27dfc8.png)
Ctrl+O 保存 Ctrl+X 退出nano编辑。
## 3.重新安装软件
退出到NanoHatOLED文件夹下install 驱动软件:
*cd ..
./install.sh*
注意需要连接网线,重新安装过程需要在线更新库文件,耐心等待十几分钟会自动重启。
![](https://cf01.ickimg.com/bbsimages/202008/e910f98a031b71208c72a5101422c945.png)
## 4.验证按键功能
重启并登录
![](https://cf01.ickimg.com/bbsimages/202008/64e0f759650f5a33d24637b8030b02c3.png)
此时OLED默认显示时间信息。参照按键开关原理图使用开关接GPIO和电阻电容和VCC3p3.
按键功能:
K1 -> Show date & time;
K2 -> Show master device's system status: IP address CPU usage RAM CPU temperature and etc;
K3 -> Shutdown. After this button is pressed system will not be shut down immediately but will pop up a Yes/No dialog. Pressing K1 switches between Yes and No and pressing K2 is to confirm the selection.
按下K2
![](https://cf01.ickimg.com/bbsimages/202008/5b8f5c4da412c36e024b8524875d8350.jpg)
按下K3
![](https://cf01.ickimg.com/bbsimages/202008/bd05f7603f43921ab197454a7700f562.jpg)
按键正常工作。^_^