1、实验目的
针对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