使用诺基亚Nokia5110做树莓派的显示屏

2018-09-20 17:10 阅读 3535

树莓派是一个嵌入式的设备,在很多时候一般不需要屏幕显示的,基本都是后台运行一些程序。但有时候需要简单显示一些数值(比如显示,树莓派IP地址,CPU和内存使用率,当前的日期时间等),还是需要显示屏的。虽然树莓派有HDMI接口,但是为了显示几个数据而连接一个HDMI显示器当然非常不方便也不好用。于是我们可以把废旧的手机显示屏,比如采用SPI通讯协议的诺基亚Nokia5110的显示屏拆下来连接树莓派的GPIO接口上做简单的数据显示和人机交互。如果结合树莓派连上DS1805温度采集就能当一个电子温度计来使用了,但这次我们主要讲显示屏。温度的显示,可以关注我们牛人技术下次会讲到。

Nokia5110显示屏引脚的定义以及和树莓派GPIO连接的方法

诺基亚的这块屏幕是款简单的8针脚,黑白显示屏幕,并且一个屏可显示多行,然后我们使用的是PCD8544驱动。

RST:外部复位引脚

CE:显示屏使能引脚

DC:数据/命令引脚

Din:串行数据输入端

CLK:串行时钟输入端

Vcc:电源引脚

BL: 亮度调节

Gnd:地

RST——GPIO 21 外部复位引脚

CE——GPIO 22 显示屏使能引脚

DC——GPIO 23 数据/命令引脚

Din——GPIO 24 串行数据输入端

CLK——GPIO 25 串行时钟输入端

Vcc——GPIO 28 电源引脚

BL——GPIO 29 亮度调节

Gnd——GPIO 0V 接地线负

这里完成硬件的连接,就可以开始安装相关的软件了。

下载安装wiring pi模块(如果是C语言控制)

我们进入树莓派的home目录,并从git上下载开源代码,然后进行编译安装。

cd /home/

git clone git://git.drogon.net/wiringPi

cd wiringPi

./build

cd /home/查看是否下载和编译成功

完成安装后为后续5110提供运行环境

编写PYTHON显示测试代码

# coding:utf-8#这里要用utf8文本编辑器编辑,否则PY脚本无法运行。

import time  #增加时钟模块

import requests

from math import fabs

from base64 import b64encode

class RaspberryMonitorNetSpeed:

url = 'http://192.168.1.1/update.cgi?output=netdev'

headers = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',

'Cache-Control': 'max-age=0',

# 'Connection':'keep-alive',

'Connection': 'close',

'Cookie': 'n56u_cookie_bw_rt_tab=WAN',

'Host': '192.168.123.1',

'Upgrade-Insecure-Requests': '1',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',

}

last_time = 0

last_rbytes = 0

last_tbytes = 0

#构造函数初始化用户和密码等信息

def __init__(self, username, passwd):

self.headers['Authorization'] = 'Basic '+b64encode((username+':'+passwd).encode()).decode()

data = self.__get_wan_rx_and_tx()

self.last_rbytes = data[0]

self.last_tbytes = data[1]

self.last_time = data[2]

def set_auth(self, username, passwd):

self.headers['Authorization'] = 'Basic '+b64encode((username+':'+passwd).encode()).decode()

def __get_wan_rx_and_tx(self):

text = requests.get(self.url, headers=self.headers).text

try:

rx = int(text.split(',')[25].lstrip('rx:').strip(), 16)

tx = int(text.split(',')[26].lstrip('tx:').rstrip('}\n').strip(), 16)

new_time = time.time()

except (IndexError, ValueError, TypeError):

return False

return [rx, tx, new_time]

def __bytes_to_humanspeed(self, B):

absval = fabs(B) / 1024

megabyte = 1024

gigabyte = megabyte * 1024

terabyte = gigabyte * 1024

# petabyte = terabyte * 1024

if absval < megabyte:

return str(round(absval, 2)) + ' KB/s'

elif absval < gigabyte:

return str(round(absval / megabyte, 2)) + ' M/s'

else:

return str(round(absval / gigabyte, 2)) + ' G/s'

def get_human_speed(self):

data = self.__get_wan_rx_and_tx()

if data:

down_speed = 0

up_speed = 0

try:

down_speed = self.__bytes_to_humanspeed((data[0] - self.last_rbytes) / (data[2] - self.last_time))#返回下载速度信息

up_speed = self.__bytes_to_humanspeed((data[1] - self.last_tbytes) / (data[2] - self.last_time))#上传速度信息

except ZeroDivisionError:

pass

self.last_rbytes = data[0]

self.last_tbytes = data[1]

self.last_time = data[2]

return down_speed, up_speed

def get_bits_speed(self):

data = self.__get_wan_rx_and_tx()

if data:

down_speed = self.__bytes_to_bitrate((data[0] - self.last_rbytes) / (data[2] - self.last_time))

up_speed = self.__bytes_to_bitrate((data[1] - self.last_tbytes) / (data[2] - self.last_time))

self.last_rbytes = data[0]

self.last_tbytes = data[1]

self.last_time = data[2]

return down_speed, up_speed

def __bytes_to_bitrate(self, B):

bits = B * 8

absval = fabs(bits)

kilobit = 1000

megabit = kilobit * 1000

gigabit = megabit * 1000

if absval < megabit:

return str(round(bits / kilobit, 2)) + ' Kbps'

elif absval < gigabit:

return str(round(bits / megabit, 2)) + ' Mbps'

else:

return str(round(bits / gigabit, 2)) + ' Gbps'

#这里是主入口函数,初始化LCD1602等信息

if __name__ == '__main__':

from lcd1602 import LCD1602

a = RaspberryMonitorNetSpeed('username', 'password')

lcd = LCD1602()

#不停的循环显示

while True:

tmp = a.get_human_speed()

lcd.lcd_string('u:' + tmp[1], lcd.LCD_LINE_1)

lcd.lcd_string('d:' + tmp[0], lcd.LCD_LINE_2)

time.sleep(2)

把上面的代码保存到/home目录下的test01.py并且使用chmod 777 命令增加执行权限,然后我们就可以使用命令来运行这个PYTHON脚步了。如果一切正常的话,你就能看到树莓派的网卡上的数据实时传输信息。需要注意的是,这里我们需要用到python3的一些外部库文件,比如Adafruit_GPIO,requests,Adafruit_DHT等等。

总结

总体来将使用诺基亚Nokia5110来作为树莓派的显示屏的操作还是有点难度和风险的,首先在连接树莓派GPIO和5110的针脚时候就千万要注意别连接出错。在加电前一定要梳理清楚是否连接正确否则怕容易烧坏机器。其次在安装一些驱动模块的时候,要注意兼容性的问题。

本文由作者自行上传发布,文章仅代表作者个人观点。如需转载,务必声明出处和网址,否则保留相关权利。

树莓派接手机屏幕_使用诺基亚Nokia5110做树莓派的显示屏相关推荐

  1. 树莓派接手机屏幕_如何将树莓派连接到手机屏幕

    第1步:您需要的东西 仅第一次: =>整个树莓派设置(显示器,键盘,鼠标,树莓派). 您可以使用朋友的设置,则只需要第一次使用. 始终使用: =>智能手机. => Raspberry ...

  2. 树莓派接手机屏幕_如何使用手机实现树莓派的连接

    用数据线通过手机分享网络,最终实现无屏幕下通过vnc/ssh连接树莓派 一.准备智能手机*1 树莓派:带已经烧写好Raspbbian系统的SD卡 数据线*1 软件:IPtools.vnc.ssh 二. ...

  3. 树莓派接手机屏幕_使用Android手机作为树莓派的屏幕

    在使用树莓派时,有时出于应急,身边没有屏幕,或者外出携带时也不方便带着屏幕走.如果能使用随身携带的智能手机当做其屏幕,则会方便许多.看看效果,一个树莓派+充电宝+手机,就会非常有用了. 满足以下条件即 ...

  4. 树莓派接手机屏幕_视频详解树莓派如何外接Kindle显示器

    哇哦,我很高兴地宣布本文在Hacker monthly上发表了! 去年7月底,我们暂别了位于Kootenays的小工作室开始了欧洲之旅.这趟旅行意在发掘有关新兴媒体.精神家园.艺术.设计以及开源项目等 ...

  5. 利用rfcomm实现树莓派与手机通信_树莓派资源整理汇总(2020年2月18日更新)

    本文收集了树莓派使用过程中经常需要用到的资源,主要包括树莓派系统镜像.树莓派硬件介绍.树莓派GPIO引脚编号.树莓派电路原理图下载.树莓派应用.树莓派工具等等,非常值得收藏. 一.快速上手 树莓派快速 ...

  6. 怎么让图片铺满手机屏幕_手机屏幕密码忘了怎么解锁

    现在基本智能手机居多,无论什么牌子都可以设置屏幕密码,但是现在什么都要密码,导致密码太多,一时记不住,下面为大家介绍手机屏幕密码忘了怎么解锁. 手机屏幕密码忘了怎么解锁 步骤1.在关机状态下同时按住[ ...

  7. mysql数据显示手机屏幕_手机屏幕数据汇总

    为方便大家查找我们测试过的手机屏幕详细参数,我们将这些数据进行了一个大致的整理,第一部分为OLED屏机型各数据的对比汇总.第二部分为LCD屏机型各数据的对比汇总.第三部分为OLED屏各机型的详细数据. ...

  8. 利用rfcomm实现树莓派与手机通信_工业物联网 | 怎么用NodeRed实现树莓派与阿里云物联网平台通信?虹科告诉你!...

    想获取更多IIOT干货 请点击蓝字,关注我们 虹科工业树莓派 高性能 多接口 宽温--适应恶劣环境 ★★★★★ Node-RED是构建物联网(IoT)应用程序的强大工具,它使用可视化的编程方法,允许开 ...

  9. 怎么让图片铺满手机屏幕_设置ImageView显示的图片铺满全屏

    为适应不同屏幕的手机,ImageView显示的图片可能不铺满屏幕,如果定高的话,两边可能会出现空白.魅族手机就会有这种情况,在其他手机里显示正常,在魅族手机里显示,图片左右两边会出现空白,为解决这一问 ...

  10. 经典按键java手机游戏_用诺基亚N95体验2G时代的JAVA手游,能正常运行吗?

    5G时代的来临似乎有点快,尽管5G在有些地区还没有完全普及开来,不少人还在用只支持4G.3G的手机,甚至还有在用2G手机.但不可否认的是,手机是否支持5G俨然成为当下消费者买手机的第一关注点. 而这篇 ...

最新文章

  1. 这个神了,一目了然,确实好,看小姐姐用动图展示10大Git命令
  2. 斯坦福CS330 2019秋季课程视频全新上线,专注多任务与元学习
  3. Py之SnowNLP:SnowNLP中文处理包的简介、安装、使用方法、代码实现之详细攻略
  4. Python dir和vars的区别
  5. 内网突破SSL嗅探的探究
  6. springMVC使用与生成序列号
  7. figtree如何编辑进化树_进化树的注释:ggtree
  8. matlab自带python_在matlab中直接在python中使用sklearn
  9. 萌新的Python练习菜鸟100例(十一)生兔子练习
  10. 捡起JavaScript(3)
  11. Java二叉排序树(转)
  12. 动态(静态)加载DLL注意
  13. 变量、变量类型与cin的基本用法详解(C++)
  14. ADF4351原理图PCB电路设计经验建议
  15. IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果...
  16. 关于C和C++的register关键字
  17. java实现表白动图
  18. win10更改/修改c盘下的用户名/Users
  19. UPX3.95程序压缩命令及使用方法
  20. 暮然回首:我的10年软件开发生涯

热门文章

  1. 通过 经纬度 获取 地理位置(Python、高德地图)
  2. 夜天之书 #61 Maintainer 的标准
  3. 微信公众平台消息接口开发(20)图片识别之人脸识别
  4. 山东理工ACM【1216】杨辉三角
  5. arm mali 天梯图_手机最新CPU天梯图 2018年12月手机最新处理器排名表
  6. DAOs(去中心化自治组织)
  7. iTest使用说明_V4.5.1
  8. 计算机中职作文,中职作文题目
  9. 可长期免费使用的国产PLC录波软件(数据采集软件)PLC-Recorder V2.0版新功能
  10. ios 微信分享重新编码链接_iOS微信分享及从Safari跳转到App