0、前提:树莓派里面已经有了wiringPi这个软件包和cmake,若没有请移步到(wiringPi参考链接)(cmake参考链接)参考链接自己安装
1、连接好线路和打开树莓派i2c
1.1、接线
使用的四线oled gnd vcc scl sda对应连接起来就行
具体接线如下图:
1.2、打开i2c
输入命令 sudo raspi-config,选择第3项启动第5项的i2c
2、下载好我写好的oled驱动代码GitHub链接:GitHub - ShangHTao/Raspberry-sysinfo-display: 树莓派i2c接口驱动的0.96寸的oled显示屏,可以显示ip地址cpu占用率和温度等
2.1例如我们首先进入桌面执行下面操作
cd ~/Desktop
mkdir test
cd test/
git clone https://github.com/ShangHTao/Raspberry-sysinfo-display
这样就在桌面上创建了一个test文件夹里面放着oled显示程序
2.2构建代码,执行下面的操作
cd Raspberry-sysinfo-display/
ls
输入命令把CMakeCache.txt文件删除才能cmake
输入命令
rm CMakeCache.txt
cmake .
make
如图所示,构建出来了一个叫做oled_i2c_show_status的可执行程序
可以简单使用./oled_i2c_show_status执行一下看看oled是否显示了对应内容
推荐后台运行输入指令 ./oled_i2c_show_status & (多加一个&)
3、设置开机自启动
问题1:在 /etc/rc.d/rc.local添加sudo nohup ~/oled_i2c_show_status &开机确实是会自动运行,但是过一段时间这个任务就被杀死了不值得为什么,有没有好心人解释一下。
问题2:在~/.config文件中创建的autostart.desktop中设置开机自启动也是运行sudo nohup ~/oled_i2c_show_status &,运行一段时间后也背杀死,请问有好心人知道吗?
ps:直接运行sudo nohup ~/oled_i2c_show_status &可以一直运行在不会被杀死,为什么?
思考:我创建个shell脚本,然后开机自启动,在shell里面执行sudo nohup ~/oled_i2c_show_status &是不是就可以不被杀死呢?
我知道了如何防止系统杀死命令再更新,格式什么也后期调整,现在还存在很多错误,望指正。。。。。。。(以上内容均为小白学习linux的记录,实属小白,欢迎大家交流,需要原码的同学可以浏览提出建议)
以上问题均已发现,是由于循环调用了popen()函数但是报错段错误,找了很多原因之后无法解决。
后面又使用fopen()函数确实可能提高运行的后台时间,但是还是错误(报错too many open files,可是明明已经使用了fclose()函数还是报错),很让人恼火。怀疑是fopen()毕竟是标准版库函数,后来切换成系统函数open()依然报错too many open files,时钟到了一定程度杀掉后台。
最后也是建了个shell脚本(我起名为)检测有没有被杀,如果被杀就再次执行,否则就继续检测,具体内容如下:
#!/bin/sh
while :
do
if [ $(ps -ef | grep -c "oled_i2c_show_status") -lt 2 ];
then
$( /home/pi/autostart/oled_i2c_show_status &) ;
fi
sleep 60s
done
确实是在被杀死的时候又继续执行了oled_i2c_show_status,但是感觉指标不治本。后去我试试能不能用python里的os.popen(),python调用c库函数。
4、python设计
等待更新。。。。