树莓派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)
    
  • 设置开机自启动
    • 建立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

树莓派4B(Ubuntu20.04)使用LCD1602液晶屏开机自动显示IP及其他信息相关推荐

  1. 树莓派4B——Ubuntu20.04 mate

    树莓派4B--Ubuntu20.04 mate 安装操作系统 安装必要的库 安装软件 VNC和SSH 开机启动 问题 安装操作系统 1.从树莓派官网下载镜像烧写工具,点这里,如图选择对应系统地烧写工具 ...

  2. 继续树莓派4B+OLED:开机自动显示IP地址

    因为有了之前(树莓派:Adafruit的I2C SSD1306 OLED驱动)那篇的基础,想干脆让它开机自动显示IP地址. 首先当然找获取IP的代码.记得前几年抄过一段,所以又找了出来: def ge ...

  3. 树莓派4B ubuntu20.04 python点亮LED 教程

    关于如何在ubuntu上配置python控制gpio的环境参见这篇博客 https://blog.csdn.net/ourkix/article/details/113417800 关于GPIO引脚 ...

  4. 树莓派4B ubuntu20.04 python驱动光电传感器实现计数 教程

    驱动光电传感器实现计数 光电传感器是将光信号转换为电信号的一种器件.其工作原理基于光电效应.光电效应是指光照射在某些物质上时,物质的电子吸收光子的能量而发生了相应的电效应现象.根据光电效应现象的不同将 ...

  5. 树莓派4B ubuntu20.04 UART 多串口配置通信

    相比树莓派0.1.2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4 中新增了 4 个 PL011 串口共计有 6 个 UART,整理此笔记用作记录和配置 ...

  6. 【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏

    偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...

  7. 在ubuntu20.04中设置锁屏背景(亲测有效)

    在ubuntu20.04中设置锁屏背景 1.新建文件夹 打开终端 输入: cd ~ mkdir software cd software/ mkdir images 在根目录创建一个software文 ...

  8. LCD1602液晶屏使用(51单片机七夕特别版)

    LCD1602液晶屏使用(51单片机七夕特别版) LCD1602简介 实现过程 操作时序 指令码 如何改变文本的样式 代码 效果图 今天是七夕节,周围的朋友啊小姐妹(伪)啊都跟对象出去玩了 囧rz,而 ...

  9. 通过 I2C 驱动 LCD1602 液晶屏(51单片机)

    通过 I2C 驱动 LCD1602 液晶屏(51单片机) 硬件实物 原理图 3.程序 #include <reg51.h> #include <intrins.h>#defin ...

  10. 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

最新文章

  1. 纯c语言贪吃蛇,纯C语言贪吃蛇 求助
  2. 计算机未来的储存装置,图说计算机存储设备
  3. rust领地柜保养物品放什么_门厅柜的样式,只有这四种
  4. 替换url中的参数值
  5. [LOJ#2270][BZOJ4912][SDOI2017]天才黑客
  6. jsp 上传转码_最完整的处理jsp处理乱码问题步骤,不需要手工转码
  7. python 装饰器 java,python之各种装饰器的使用
  8. c语言大数倍数,leetcode-1346(检查整数及其两倍数是否存在)--C语言实现
  9. LABjs异步加载组件
  10. 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
  11. Android Support Library更新到v22.1之AppCompat新特性
  12. cmd后台运行exe_了解运行命令的原理,为QQ制作运行命令启动
  13. Oracle v$sql,v$sqlarea,v$sqltext区别
  14. 微信小程序开发(一):小程序代码构成
  15. JDK11下载与安装
  16. 数字集成电路版图设计(二)——Cadence IC简单的反相器版图设计
  17. 语义分割-FCNs in the wild: Pixel-level adversarial and constraint-based adaptation 对抗方法实现不同数据集语义分割
  18. 床帘机器人_如何打造一个更舒适更智能的大学宿舍?
  19. 云服务器安装frps实现内网穿透
  20. [Jzoj] 3426. 封印一击

热门文章

  1. 学习fullpage的使用
  2. hpux oracle19c dbca DBT-05509 Failed To Connect To The Specified Database
  3. 史上最全:Jetbrains全家桶31款软件 分类+功能整理收集
  4. python/Matplotlib绘制复变函数图像
  5. android studio创建桌面插件widget
  6. 大专一年级计算机考试题,大专一年级语文期中考试试卷.doc
  7. Hilditch细化算法
  8. windows中nginx.exe注册为系统服务
  9. [IOS APP]蛙-莫言经典有声小说
  10. Linux运维工程师常见面试题(一)