树莓派4B(Ubuntu20.04)使用LCD1602液晶屏开机自动显示IP及其他信息
给
树莓派4B
装了Ubuntu20.04
当做便携服务器在使用,为了便携,自然是不接网线使用WiFi
,不接显示屏使用SSH远程连接工具
,那就面临一个问题,在没有固定分配IP的情况下,怎么不通过接显示器获取IP用来远程连接呢?搜索看了下,最方便的应该就是开机自启自动显示IP等信息
了。
- Ubuntu20.04 Python环境下,获取IP、磁盘存储占用等配置信息
- 获取IP
import socket def getIP():ip = socket.gethostbyname(socket.gethostname())return 'IP:'+ str(ip)
- 获取MAC
import uuid def getMAC():node = uuid.getnode()macHex = uuid.UUID(int=node).hex[-12:]MAC = []for i in range(len(macHex))[::2]:MAC.append(macHex[i:i+2])MAC =':'.join(MAC)return 'MAC:' + str(MAC)
- 获取磁盘占用
import os def getDisk():disk = os.statvfs("/")disk_size = disk.f_bsize * disk.f_blocks / (1024 ** 3) # 1G = 1024M 1M = 1024KB 1KB = 1024bytessizeStr = str("%s" % format(disk_size, '.2f'))disk_used = disk.f_bsize * (disk.f_blocks - disk.f_bfree) / (1024 ** 3)usedStr = str("%s" % format(disk_used, '.2f'))return usedStr + "/" + sizeStr
- 接入OLED屏幕,点亮屏幕显示
- 接线参考开机自启动OLED屏显示
GND:电源地(Ground)
VCC:电源正(3.3V-5V)
SCL:IIC时钟
SDA:IIC数据
连接树莓派:GND接Gound,VCC接5V,SCL接BCM3(SCL),SDA接BCM2(SDA)。
- 代码参考树莓派通过 I2C 驱动 LCD1602 液晶屏,在文件夹内写入驱动程序
LCD1602.py
import time import smbus BUS = smbus.SMBus(1) LCD_ADDR = 0x27 BLEN = 1 #turn on/off background light def turn_light(key):global BLENBLEN = keyif key ==1 :BUS.write_byte(LCD_ADDR ,0x08)else:BUS.write_byte(LCD_ADDR ,0x00) def write_word(addr, data):global BLENtemp = dataif BLEN == 1:temp |= 0x08else:temp &= 0xF7BUS.write_byte(addr ,temp) def send_command(comm):# Send bit7-4 firstlybuf = comm & 0xF0buf |= 0x04 # RS = 0, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB # Make EN = 0write_word(LCD_ADDR ,buf)# Send bit3-0 secondlybuf = (comm & 0x0F) << 4buf |= 0x04 # RS = 0, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB # Make EN = 0write_word(LCD_ADDR ,buf) def send_data(data):# Send bit7-4 firstlybuf = data & 0xF0buf |= 0x05 # RS = 1, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB # Make EN = 0write_word(LCD_ADDR ,buf)# Send bit3-0 secondlybuf = (data & 0x0F) << 4buf |= 0x05 # RS = 1, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB # Make EN = 0write_word(LCD_ADDR ,buf) def init_lcd():try:send_command(0x33) # Must initialize to 8-line mode at firsttime.sleep(0.005)send_command(0x32) # Then initialize to 4-line modetime.sleep(0.005)send_command(0x28) # 2 Lines & 5*7 dotstime.sleep(0.005)send_command(0x0C) # Enable display without cursortime.sleep(0.005)send_command(0x01) # Clear ScreenBUS.write_byte(LCD_ADDR ,0x08)except:return Falseelse:return True def clear_lcd():send_command(0x01) # Clear Screen def print_lcd(x, y, str):if x < 0:x = 0if x > 15:x = 15if y <0:y = 0if y > 1:y = 1# Move cursoraddr = 0x80 + 0x40 * y + xsend_command(addr)for chr in str:send_data(ord(chr)) if __name__ == '__main__':init_lcd()print_lcd(0, 0, 'Hello, world!')
- 点亮显示
#!/user/bin/env python import smbus import datetime import time import pytz as pytz import sys import LCD1602 as LCD import os import socket import uuid def getIP():ip = socket.gethostbyname(socket.gethostname())return 'IP:'+ str(ip) def getMAC():node = uuid.getnode()macHex = uuid.UUID(int=node).hex[-12:]MAC = []for i in range(len(macHex))[::2]:MAC.append(macHex[i:i+2])MAC =':'.join(MAC)return 'MAC:' + str(MAC) def getDisk():disk = os.statvfs("/")disk_size = disk.f_bsize * disk.f_blocks / (1024 ** 3) # 1G = 1024M 1M = 1024KB 1KB = 1024bytessizeStr = str("%s" % format(disk_size, '.2f'))disk_used = disk.f_bsize * (disk.f_blocks - disk.f_bfree) / (1024 ** 3)usedStr = str("%s" % format(disk_used, '.2f'))return usedStr + "/" + sizeStr if __name__ == '__main__': LCD.init_lcd()time.sleep(1)ipStr = getIP()LCD.print_lcd(0, 0, ipStr)for x in range(1, 4):LCD.turn_light(0)LCD.print_lcd(4, 1, 'LIGHT OFF')time.sleep(0.5)LCD.turn_light(1)LCD.print_lcd(4, 1, 'LIGHT ON ')time.sleep(0.5)LCD.turn_light(0)while True:tz = pytz.timezone('Asia/Shanghai') # 东八区show = getDisk() + " " + str(datetime.datetime.fromtimestamp(int(time.time()), tz).strftime('%H:%M'))LCD.print_lcd(0, 1, show )time.sleep(0.2)
- 接线参考开机自启动OLED屏显示
- 设置开机自启动
- 建立rc-local.service文件,如果存在的话可以不用创建
sudo vim /etc/systemd/system/rc-local.service
- 将下列内容复制进rc-local.service文件
[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
- 创建文件rc.local
sudo vim /etc/rc.local
- 将下列内容复制进rc.local文件(对应脚本的位置和虚拟环境的位置自行修改)
#!/bin/sh -e ## ## rc.local ## ## This script is executed at the end of each multiuser runlevel. ## Make sure that the script will "exit 0" on success or any other ## value on error. ## ## In order to enable or disable this script just change the execution ## bits. ## ## By default this script does nothing. # eaudio --start nohup /root/.virtualenvs/dj3/bin/python3 -u /opt/pi/getpi.py > test.out 2>&1 &
- 给rc.local加上权限
sudo chmod +x /etc/rc.local
- 启用服务
sudo systemctl enable rc-local
- 启动服务并检查状态
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
- 重启系统测试
reboot
- 建立rc-local.service文件,如果存在的话可以不用创建
树莓派4B(Ubuntu20.04)使用LCD1602液晶屏开机自动显示IP及其他信息相关推荐
- 树莓派4B——Ubuntu20.04 mate
树莓派4B--Ubuntu20.04 mate 安装操作系统 安装必要的库 安装软件 VNC和SSH 开机启动 问题 安装操作系统 1.从树莓派官网下载镜像烧写工具,点这里,如图选择对应系统地烧写工具 ...
- 继续树莓派4B+OLED:开机自动显示IP地址
因为有了之前(树莓派:Adafruit的I2C SSD1306 OLED驱动)那篇的基础,想干脆让它开机自动显示IP地址. 首先当然找获取IP的代码.记得前几年抄过一段,所以又找了出来: def ge ...
- 树莓派4B ubuntu20.04 python点亮LED 教程
关于如何在ubuntu上配置python控制gpio的环境参见这篇博客 https://blog.csdn.net/ourkix/article/details/113417800 关于GPIO引脚 ...
- 树莓派4B ubuntu20.04 python驱动光电传感器实现计数 教程
驱动光电传感器实现计数 光电传感器是将光信号转换为电信号的一种器件.其工作原理基于光电效应.光电效应是指光照射在某些物质上时,物质的电子吸收光子的能量而发生了相应的电效应现象.根据光电效应现象的不同将 ...
- 树莓派4B ubuntu20.04 UART 多串口配置通信
相比树莓派0.1.2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4 中新增了 4 个 PL011 串口共计有 6 个 UART,整理此笔记用作记录和配置 ...
- 【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏
偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...
- 在ubuntu20.04中设置锁屏背景(亲测有效)
在ubuntu20.04中设置锁屏背景 1.新建文件夹 打开终端 输入: cd ~ mkdir software cd software/ mkdir images 在根目录创建一个software文 ...
- LCD1602液晶屏使用(51单片机七夕特别版)
LCD1602液晶屏使用(51单片机七夕特别版) LCD1602简介 实现过程 操作时序 指令码 如何改变文本的样式 代码 效果图 今天是七夕节,周围的朋友啊小姐妹(伪)啊都跟对象出去玩了 囧rz,而 ...
- 通过 I2C 驱动 LCD1602 液晶屏(51单片机)
通过 I2C 驱动 LCD1602 液晶屏(51单片机) 硬件实物 原理图 3.程序 #include <reg51.h> #include <intrins.h>#defin ...
- 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...
最新文章
- 纯c语言贪吃蛇,纯C语言贪吃蛇 求助
- 计算机未来的储存装置,图说计算机存储设备
- rust领地柜保养物品放什么_门厅柜的样式,只有这四种
- 替换url中的参数值
- [LOJ#2270][BZOJ4912][SDOI2017]天才黑客
- jsp 上传转码_最完整的处理jsp处理乱码问题步骤,不需要手工转码
- python 装饰器 java,python之各种装饰器的使用
- c语言大数倍数,leetcode-1346(检查整数及其两倍数是否存在)--C语言实现
- LABjs异步加载组件
- 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
- Android Support Library更新到v22.1之AppCompat新特性
- cmd后台运行exe_了解运行命令的原理,为QQ制作运行命令启动
- Oracle v$sql,v$sqlarea,v$sqltext区别
- 微信小程序开发(一):小程序代码构成
- JDK11下载与安装
- 数字集成电路版图设计(二)——Cadence IC简单的反相器版图设计
- 语义分割-FCNs in the wild: Pixel-level adversarial and constraint-based adaptation 对抗方法实现不同数据集语义分割
- 床帘机器人_如何打造一个更舒适更智能的大学宿舍?
- 云服务器安装frps实现内网穿透
- [Jzoj] 3426. 封印一击
热门文章
- 学习fullpage的使用
- hpux oracle19c dbca DBT-05509 Failed To Connect To The Specified Database
- 史上最全:Jetbrains全家桶31款软件 分类+功能整理收集
- python/Matplotlib绘制复变函数图像
- android studio创建桌面插件widget
- 大专一年级计算机考试题,大专一年级语文期中考试试卷.doc
- Hilditch细化算法
- windows中nginx.exe注册为系统服务
- [IOS APP]蛙-莫言经典有声小说
- Linux运维工程师常见面试题(一)