树莓派pico rp2040 使用rust 在ssd1306上显示中文信息

news/2024/9/28 20:34:38/文章来源:https://www.cnblogs.com/sn-dnv-aps/p/18438357

在rp2040上用DHT22 + ssd1306显示温度信息,

 用 embedded-graphics库和ssd1306库来实现。但实现的效果不是很理想,无法在ssd1306屏幕上显示中文。

 为了解决这个问题,在github和crates.io上面找了几天。解决方法还是找到了,利用  u8g2-font这个库实现。。。

 

实现的办法如下:

Cargo.toml的[dependencies]节点下添加如下内容

embedded-hal = { version = "1.0.0" } 
embedded-graphics = "0.8.1"
dht-sensor = "0.2.1"
ssd1306 = "0.8.1"
u8g2-fonts = { version = "0.4.0", features = ["embedded_graphics_textstyle"] }

 

src/main.rs文件头中添加引用

use embedded_graphics::{pixelcolor::BinaryColor,prelude::*,primitives::{Line, PrimitiveStyle},text::{Baseline, Text},
};
use u8g2_fonts::U8g2TextStyle;

src/main.rs:: fn main()  里面添加定义

  ...此处省略了很多代码// Create a text style for drawing the font:
此处的u8g2_font_wqy12_t_gb2312是输出中文的重点let character_style =U8g2TextStyle::new(u8g2_fonts::fonts::u8g2_font_wqy12_t_gb2312, BinaryColor::On);fn main()  -> {.... 此处省略了很多代码
loop {// Empty the display:// Draw 3 lines of text://reset before looplet _ = display.clear(BinaryColor::Off);write!(&mut line2, "湿度: {}%", humi).unwrap();Text::with_baseline(line2.as_str(),Point::new(32, 38),character_style.clone(),Baseline::Top,).draw(&mut display).unwrap();... 此处省略了很多代码display.flush().unwrap();// delay for 1 sec//per loop is 1 sectimer.delay_ms(1000);}
}

 

最终实现效果如图

 

本项目开源地址: https://github.com/sndnvaps/rp2040-display

u8g2-font库开源地址,主用提供中文字库:https://github.com/Finomnis/u8g2-fonts

目前支持的中文字库 https://github.com/olikraus/u8g2/wiki/fntgrpwqy ,https://github.com/olikraus/u8g2/wiki/fntgrpbb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/805381.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

typeScript 的第一步---安装

Node.js/浏览器,只认识JS代码,不认识TS代码,需要将TS代码转化为JS代码,然后才能运行。 安装命令:npm i -g typescript 或者 yarn global add typescript 注意:Mac电脑安装全局包时,需要通知添加sudo获取权限。sudo npm i -g typescript 验证安装是否成功:tsc -v 查…

为什么用 AWS CLI?因为我懒得点鼠标!

在这篇博客中,我们一起深入探索 AWS CLI 的世界,从零开始,逐步构建在云端的家园。将介绍 AWS CLI 的基本功能和使用场景,如何创建 IAM 用户、VPC、子网、安全组、EC2 实例等,甚至还会搭建一个应用负载均衡器(ALB)。无论你是初学者还是有一定基础的用户,都能通过本指南掌…

妙用编辑器:使用Notepad--正则表达式从命令结果报文快速生成新命令

应用场景 日常生活中有些维护场景,比如检查设备状态,执行查询命令后,得到精简结果报文,如果要更深入的检查状态,可能还要执行其他命令,逐个对象进行查询,这里涉及到快速从报文生成查询指令的功能。 比如有如下一个从LST 命令查询出来的报文,需要快速的生成DSP命令,逐个…

bs4解析并提取人民网新闻标题数据

1. 目标url:http://www.people.com.cn/ 2. 查找标题信息所在标签:标题的文本信息在<a>标签中,且<a>标签有target属性,属性值为"_blank"。<a>标签有父辈标签<div>和<h3>。 当需要根据元素的层级关系、属性组合等复杂条件定位时;文…

volatile关键字最全原理剖析

介绍 volatile是轻量级的同步机制,volatile可以用来解决可见性和有序性问题,但不保证原子性。 volatile的作用:保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 禁止进行指令重排序。底层原理 内存屏障 vol…

2024.9.28 代码源模拟赛

省流:45+20+5+0=70省流:\(45+20+5+0=70\) 简称:唐诗在此膜拜 \(klz\) \(Heldivis\) \(Sorato\) \(czl\) \(Ech0\_7\) yxans lihe_qwq 大佬 T1 先看的 T1 ,想了一个拓排(其实是看错题了),然后过了第一个样例,然后咋调都过不去,就去码暴力了。 过了大概 10min 发现看错题…

第5周 5.1 顺序与选择结构

5.1 顺序与选择结构 5.1.1 顺序结构 顺序结构是程序中最简单、最基本的流程控制结构,它按照程序中语句出现的先后顺序依次执行,直到程序的结束。 顺序结构示例:public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!&q…

基于python的四则运算自动生成的命令行程序

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标 基于python的四则运算自动生成的命令行程序团队成员 姚彬彬 3122006324一.Github地址 https://g…

章16——坦克大战1——绘图、事务

有关paint方法为什么会被调用JAVA的事件处理机制 事件发生的地方和事件处理的地方是不一样的:

WINCCV7.5SP2VBA编程8-通过事件执行脚本

这一篇在新浪博客发表过,审核周期有点长,为了避免丢失,这里再记录一遍。 有三种途径执行Wincc画面设计器的VBA脚本:事件、用户自定义菜单和工具栏、VBA编辑器。 前面的学习是通过VBA编辑器执行的VBA程序,现在通过事件来练习VBA程序执行。 还是在前面WINCC项目程序来做练习…

WinToUSB 9.0 离线注册

WinToUSB 9.0 qt程序,注册验证代码与EasyUEFI 大同小异,这里仅记录相关类、函数地址 关联 https://www.cnblogs.com/DirWang/p/18149030 目录WinToUSB 9.0CActivationDlgCActivationDlg QMetaObject__dCActivationRegisterPageCActivationRegisterPage QMetaObject__dCActiva…

结对项目:自动生成小学四则运算题目

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标 结对实现一个自动生成小学四则运算题目的命令行程序项目一、项目开发人员以及仓库地址 1、开发人…