嵌入式人工智能(20-树莓派4B通过OLED开机显示本机IP地址、CPU温度)

1、实验目的

CSDN

针对DHCP自动分配IP地址而又不知道IP地址是多少的主机,可以通过开机自动获取本机IP地址送OLED显示的Python程序,设置开机运行即可。

有了这个思路,那么程序实现起来就非常简单了。python语言的强大简洁的功能,让获取IP地址的代码异常简单,只需要导入socket库调用里面的函数即可,总共就几行代码。

2、实验代码 

开机获取IP地址的程序,可能会因系统还没有获取到IP地址而无法显示,因此需要延时一会再调用get_local_ip函数,或者再sh脚本里面延时一会再执行。同学们可以试试。

from PIL import Image  
from PIL import ImageDraw
from PIL import ImageFont
import RPi.GPIO as GPIO
import luma.oled as oled  
from luma.core.interface.serial import i2c    
from luma.oled.device import ssd1306  
from luma.core.render import canvas
import socket
import time
import subprocess

def OLED_Init():
    WIDTH=128
    HEIGHT=64 
    # 创建I2C接口对象  
    serial = i2c(port=1, address=0x3C)  # 地址可能因显示屏型号而异,由命令行“sudo i2cdetect -y 1”得到
    # 创建OLED设备对象  
    device = ssd1306(serial, WIDTH, HEIGHT) 
    return device


def get_local_ip():
    st=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    try:
        st.connect(('8.8.8.8',80))
        ip_address=st.getsockname()[0]
    except Exception:
        ip_address='127.0.0.1'
    finally:
        st.close()
    return ip_address

 
def get_cpu_temperature():
    # 使用subprocess.check_output执行vcgencmd命令
    # 输出的格式为: temp=xx.x'C
    temperature_output = subprocess.check_output(['vcgencmd', 'measure_temp']).decode()
    # 提取温度值
    cpu_temperature = float(temperature_output.replace('temp=', '').replace("'C", ''))
    return cpu_temperature


if __name__ == '__main__':
    global device
    device = OLED_Init()
    font = ImageFont.truetype('STKAITI.TTF',17)
    ip_address = get_local_ip()
    exit_time = time.time() + 5
    while True:
        cpu_temperature=get_cpu_temperature()
        with canvas(device) as draw:
            draw.rectangle(device.bounding_box, outline=0, fill=0)
            draw.text((0,0),'本机IP地址为:',font=font, fill='white')
            draw.text((0,20),str(ip_address),font=font, fill='white')
            draw.text((0,40),'CPU TEMP:',font=font, fill='white')
            draw.text((90,40),str(cpu_temperature),font=font, fill='white')

               

        

当然该程序也可以改为开机运行显示本机IP60秒之后退出,这样就不用一直显示,占用硬件资源了。

    exit_time = time.time() + 5
    while True:
        cpu_temperature=get_cpu_temperature()
        with canvas(device) as draw:
            draw.rectangle(device.bounding_box, outline=0, fill=0)
            draw.text((0,0),'本机IP地址为:',font=font, fill='white')
            draw.text((0,20),str(ip_address),font=font, fill='white')
            draw.text((0,40),'CPU TEMP:',font=font, fill='white')
            draw.text((90,40),str(cpu_temperature),font=font, fill='white')
        if time.time() > exit_time:
            break

3、设置开机启动

这个比较简单,同学们可以参考CSDN这篇文章,这里可以把开机启动文件放到autorun文件夹里面,以后要修改添加功能比较方便,也避免其他文件更换路径找不到的情况出现。

复制这个开机显示IP地址的Python文件Oled_IP.py到autorun文件夹内。

修改下autoboot.sh文件内容

#!/bin/sh
vncserver-virtual -geometry 1440x1080
cd /home/pi/autorun
python Oled_IP.py

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值