- 浏览: 2147330 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
1.基础:认识MAX7219
拿到MAX7219驱动的LED矩阵,第一件事是先连接并尝试显示图案。使用MAX7219除了需要提供GND以及VCC外,只需要再提供三根引脚即可点亮矩阵。其中,DIN引脚输入数据,CS(LOAD)引脚控制数据输入,CLK引脚用于区分每个bit。
MAX的整个写入流程为,首先CS引脚置0,表示允许写入。而后从高位顺序写入16个bit。每个bit的写入方式为首先DIN置为要写入的bit值,而后CLK产生一个下降沿(图中为上升沿,不知道为何有差别)即被读入。最后CS引脚置1表示写入结束。
时序图如下:
在运行之前,需要进行一次初始化,其行为是向某几个特定的地址写入特定的值。至少需要写入两个地址,第一个是0x0b,写入0x07表示扫描显示所有行。第二个是0x0c,写入1表示进入工作模式。
而后点阵上每一行都有其地址,如第一行是0x01到第八行是0x08,每次向固定行的地址写入一个8位二进制数即可在指定行上显示图案。
2. 树莓派对GPIO的访问——虚拟文件系统访问
Linux可以通过访问sys/class/gpio下的一些文件,通过对这些文件的读写来实现对于GPIO的访问。
树莓派下面的可用的GPIO如右图所示,需要注意树莓派一代和二代的区别。
这里根据大大的博客攻略,我首先尝试用shell。代码直接参考了大大的。先试着玩一下。
在终端中:
效果如图:
3. 树莓派对GPIO的访问——使用库
这里我使用了wiring库,非常容易上手。关键函数:digitalWrite()写GPIO;pinMode()设置GPIO方向;
需要注意的是它的管脚编号和树莓派不同。
上代码:
Makefile:
结果和前面一样。LED矩阵上显示了爱心。
把上面代码改为python
拿到MAX7219驱动的LED矩阵,第一件事是先连接并尝试显示图案。使用MAX7219除了需要提供GND以及VCC外,只需要再提供三根引脚即可点亮矩阵。其中,DIN引脚输入数据,CS(LOAD)引脚控制数据输入,CLK引脚用于区分每个bit。
MAX的整个写入流程为,首先CS引脚置0,表示允许写入。而后从高位顺序写入16个bit。每个bit的写入方式为首先DIN置为要写入的bit值,而后CLK产生一个下降沿(图中为上升沿,不知道为何有差别)即被读入。最后CS引脚置1表示写入结束。
时序图如下:
在运行之前,需要进行一次初始化,其行为是向某几个特定的地址写入特定的值。至少需要写入两个地址,第一个是0x0b,写入0x07表示扫描显示所有行。第二个是0x0c,写入1表示进入工作模式。
而后点阵上每一行都有其地址,如第一行是0x01到第八行是0x08,每次向固定行的地址写入一个8位二进制数即可在指定行上显示图案。
2. 树莓派对GPIO的访问——虚拟文件系统访问
Linux可以通过访问sys/class/gpio下的一些文件,通过对这些文件的读写来实现对于GPIO的访问。
树莓派下面的可用的GPIO如右图所示,需要注意树莓派一代和二代的区别。
这里根据大大的博客攻略,我首先尝试用shell。代码直接参考了大大的。先试着玩一下。
!/bin/bash # DIN, CS, CLK的GPIO口位置 DIN=4 CS=3 CLK=2 # 一些文件路径 GPIO_BASE=/sys/class/gpio GPIO_EXPORT=${GPIO_BASE}/export GPIO_UNEXPORT=${GPIO_BASE}/unexport BIN=(00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000) # 生成指定GPIO引脚的文件夹位置 function GPIO(){ echo ${GPIO_BASE}/gpio$1 } # 将某个引脚export到用户态 function GPIO_export(){ if [ -d `GPIO $1` ]; then echo GPIO pin $1 found in folder. else echo $1 > ${GPIO_EXPORT} fi } # unexport某个引脚 function GPIO_unexport(){ if [ -d `GPIO $1` ]; then echo $1 > ${GPIO_UNEXPORT} else echo GPIO pin $1 not found. fi } # 改变某个引脚的方向 function GPIO_direction(){ echo $2 > `GPIO $1`/direction } # 改变某个引脚的值 function GPIO_set(){ echo $2 > `GPIO $1`/value } # 改变DIN的值 function GPIO_DIN(){ GPIO_set $DIN $1 } # 改变CS的值 function GPIO_CS(){ GPIO_set $CS $1 } # 改变CLK的值 function GPIO_CLK(){ GPIO_set $CLK $1 } # 向MAX7219发送一个byte的值 function Matrix_send_char(){ local i=1 for ((i=1;i<=8;i++)); do chr=`expr substr $1 $i 1` GPIO_DIN $chr GPIO_CLK 1 GPIO_CLK 0 done } # 向MAX7219发送一次完整的信号 function Matrix_send_word(){ GPIO_CS 1 GPIO_CS 0 GPIO_CLK 0 Matrix_send_char $1 Matrix_send_char $2 GPIO_CS 1 } # 初始化GPIO引脚 function GPIO_init(){ GPIO_export $DIN GPIO_export $CS GPIO_export $CLK sleep 2 GPIO_direction $DIN out GPIO_direction $CS out GPIO_direction $CLK out } # 清除GPIO引脚 function GPIO_clear(){ GPIO_unexport $DIN GPIO_unexport $CS GPIO_unexport $CLK } # 在点阵上显示数据 function Matrix_render(){ local i=1 for ((i=0;i<8;i++)); do echo $i $1 Matrix_send_word ${BIN[$i]} $1 shift done } # 使用文件中的数据进行显示 function Matrix_render_file(){ local tmp=(`cat $1`) Matrix_render "${tmp[@]}" } # 使用某个图案清屏 function Matrix_clear(){ local STR=( 00000000 01100110 11111111 11111111 11111111 01111110 00111100 00011000 ) Matrix_render "${STR[@]}" } # 初始化点阵 function Matrix_init(){ # 编码模式 Matrix_send_word 00001001 00000000 # 亮度 Matrix_send_word 00001010 00000011 # 扫描数码管个数 Matrix_send_word 00001011 00000111 # 工作模式 Matrix_send_word 00001100 00000001 # 初始化完毕后清屏显示默认图案 Matrix_clear }
在终端中:
source matrix.sh GPIO_init Matrix_init
效果如图:
3. 树莓派对GPIO的访问——使用库
这里我使用了wiring库,非常容易上手。关键函数:digitalWrite()写GPIO;pinMode()设置GPIO方向;
需要注意的是它的管脚编号和树莓派不同。
上代码:
#include <wiringPi.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define DecodeMode 0x09 //译码模式寄存器 #define Intensity 0x0a //亮度寄存器 #define ScanLimit 0x0b //扫描位数寄存器 #define ShutDown 0x0c //低功耗模式寄存器 #define DisplayTest 0x0f //显示测试寄存器 #define ShutdownMode 0x00 //低功耗方式 #define NormalOperation 0x01 //正常操作方式 #define ScanDigit 0x07 //扫描位数设置,显示8位数码管 #define DecodeDigit 0x00 //译码设置,8位均为非译码 #define IntensityGrade 0x0a //亮度级别设置 #define TestMode 0x01 //显示测试模式 #define TextEnd 0x00 //显示测试结束,恢复正常工作模式 #define DIN 8 #define CS 9 #define CLK 7 uchar buffer[8]={0x00,0x66,0xff,0xff,0xff,0xff,0x7e,0x3c,0x18}; void delay(uint t){ uint i; while(t--) for (i = 0; i < 125; i++); } void sendChar(char ch){ char i, tmp; for(i = 0; i < 8; i++){ tmp = ch & 0x80; if(tmp) digitalWrite(DIN, HIGH); else digitalWrite(DIN, LOW); ch = ch << 1; digitalWrite(CLK, HIGH:); digitalWrite(CLK, LOW); } } void writeWord(char addr, char num){ digitalWrite(CS, HIGH); digitalWrite(CS, LOW); digitalWrite(CLK, LOW); sendChar(addr); sendChar(num); digitalWrite(CS, HIGH); } void write(){ char i; for(i = 0; i < 8; i++){ printf("%d %d\n",i, buffer[i]); writeWord(i + 1, buffer[i]); } } void init(){ writeWord(0x09, 0x00); writeWord(0x0a, 0x03); writeWord(0x0b, 0x07); writeWord(0x0c, 0x01); } int main(){ wiringPiSetup(); pinMode(DIN, OUTPUT); pinMode(CS, OUTPUT); pinMode(CLK, OUTPUT); init(); wirte(); return 0; }
Makefile:
matrix:matrix.o gcc matrix.c -o matrix -lwiringPi clean: rm -f matrix matrix.o
结果和前面一样。LED矩阵上显示了爱心。
把上面代码改为python
#!/usr/bin/env python # encoding: utf-8 import RPi.GPIO as GPIO import time DIN = 12 CS = 16 CLK = 18 GPIO.setmode(GPIO.BOARD) GPIO.setup(DIN,GPIO.OUT) GPIO.setup(CS,GPIO.OUT) GPIO.setup(CLK,GPIO.OUT) buffer = ['00000000','01100110','11111111','11111111','11111111','01111110','00111100','00011000'] #buffer = [0x00,0x66,0xff,0xff,0xff,0x7e,0x3c,0x18] def send(byteData): for bit in range(0,8): if(byteData & 0x80): GPIO.output(DIN,True) else: GPIO.output(DIN,False) byteData = byteData<<1 GPIO.output(CLK,True) GPIO.output(CLK,False) def writeWord(addr,num): GPIO.output(CS,True) GPIO.output(CS,False) GPIO.output(CLK,False) send(addr) send(num) GPIO.output(CS,True) def wt(): for i in range(0,8): print("%d %d" %(i,int(buffer[i],2))) writeWord(i+1,int(buffer[i],2)) def initData(): writeWord(0x09,0x00) writeWord(0x0a,0x03) writeWord(0x0b,0x07) writeWord(0x0c,0x01) writeWord(0xff,0x00) try: initData() wt() except KeyboardInterrupt: pass time.sleep(2) GPIO.cleanup()
发表评论
-
树莓派加无线网卡配置WIFI热点的方法
2018-09-25 00:04 1611配置网络 安装 dnsmasq ... -
树莓派u盘格式化后放进系统后不识别
2018-09-24 19:38 886树莓派u盘格式化后放进系统后不识别 diskgenius磁盘 ... -
一些常用的命令
2018-04-25 22:57 410#获得所有设备的功能,如带宽信息(2.4GHz,和5GHz), ... -
树莓派3B创建WiFi热点
2018-04-01 11:30 7534创建WiFi热点使用的GitHub上一个开源项目: http ... -
树莓派 - L298N模块 驱动直流电机
2018-03-18 16:45 2009单片机或树莓派一般使用 L298n 模块来驱动电机 。L298 ... -
树莓派驱动LCD12864显示屏
2018-03-11 16:49 1241适用于ST7920控制器的LCD12864显示屏,使用wiri ... -
树莓派 - MAX7219(数字倒计时) - python
2018-03-04 19:04 1164写了个倒计时 #!/usr/bin/env python ... -
树莓派系列教程:红外遥控
2018-02-25 14:11 2748网上淘到了一个红外接 ... -
树莓派手动指定静态IP和DNS
2018-02-16 11:58 1263在把玩树莓派的过程中 ... -
树莓派 c获取树莓派CPU温度
2018-02-14 14:23 886C语言文件IO操作 新建一个名为cpu-temp.c文 ... -
树莓派GPIO控制--C语言篇
2018-02-14 13:58 1613一. 常用开源工程简介 树莓派内核中已经编译自带了gpio的 ... -
树莓派 远程看鱼眼摄像头
2018-02-12 21:12 1014mac电脑上最好下载vlc视频软件 有两种方式, 第一种: ... -
如何安装树莓派鱼眼摄像头模块
2018-02-12 13:58 1268安装树莓派摄像头模块 视频地址:http://www.wav ... -
树莓派使用RFID-RC522A读卡器对IC卡进行读写(通过 python)
2018-02-10 21:58 22411. 配置树莓派 首先需要运行raspi-config,开启 ... -
树莓派 1602A显示屏
2018-02-02 20:11 1245树莓派 1602A显示屏 下面代码本人测试过没有问题,开始运 ... -
树莓派 - 点亮LED
2017-12-31 14:14 774先按照下面这个图 连线:(对于LED,负极的那面内部的铁片很大 ... -
树莓派新手入门教程 - node下使用gpio
2017-12-24 12:43 1048安装 Node 为了运行 Node 脚本,树莓派必须安装 N ...
相关推荐
Raspberry Pico MAX7219矩阵LED 与的Pico集成。 这个脚本有一种方法可以使文本滚动灵感来自接线Pico没有5v引脚,但是VBUS连接到电源输入。 MAX7219需要5v输入,因此Pico的电源必须为5v。 这是SPI0的默认引脚。 MAX...
最大7219 用于 max7219 LED 矩阵驱动器的 Clojure 库(在树莓派上)。[max7219 " 0.1.2 " ] max7219 是串行接口的 8x8(或 7 段)LED 驱动器。 几个驱动器可以串联起来。 您可以通过 SPI 向驱动程序发送命令和数据...
max30102使用手册和STM32实例
基于Stm32 HAL库的Max7219点阵显示驱动库 Max7219 dot matrix display driver library based on Stm32 HAL librar 单片机设计,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以...
它只花费你的树莓派和 MAX485 RS-485 模块的价格(大约 2 美元)。 该脚本将帮助您创建一种通过网页 HTTP 页面控制 DMX 设备的方法。 你需要什么? 物品 价值 树莓派 MAX485 RS-485 模块 电缆 一些 0.1 针头...
MAX7219点阵显示模块,把16屏串联,连接WIFI,显示IP, 开发工具:arduino 开发语言:c 需要硬件:esp8266模块 MAX7219点阵显示模块
该3.7V锂电池电量计使用Gravity I2C接口,基于MAX17043设计,采用超低工作电流,通过Maxim专利算法,实时跟踪锂电池的相对充电状态(SOC,State-Of-Charge),无需充放电学习过程,无积累误差,即插即用,准确测量锂...
本设计分享的是工业通信双驱动器/接收器树莓派RS232板原理图/PCB源文件,供网友下载学习。树莓派 RS232板v1.0是工业设备的标准通信端口。该模块基于MAX3232,它是一个双驱动器/接收器,包括电容电压发生器,用于从...
最高6675 用K型热电偶读取温度。 Raspberry pi NodeJS。 从npmjs获取代码。 npm i max6675-raspi --save PIN值为BCM GPIO(绿色)。 通用输入输出
MAX17043/MAX17044是用于手持和便携式设备中锂离子电池的超紧凑、低成本主机侧燃油表系统。MAX17043配置为单锂电池,MAX17044配置为双电池2S电池组。 MAX17043/MAX17044使用一种复杂的锂电池建模方案,...
机顶盒Amlogic S9xxx是S905x3,S905x2,S922x,S905x,S905d,s912等,例如Phicomm-N1,Octopus-Planet,X96-Max +,HK1-Box,H96-Max-X3,Belink GT-King,Belink GT- King Pro,UGOOS AM6 Plus,Fiber火HG680P,...
-2个LED MAX7219 在树莓派等环境下进行激活,在VNC和SSH上进行激活,并按主要原则进行奖励。 测试产品的外观,外观和功能。 网站(Créationd'un)网站avec joomla(域名套件?)Le nom du domain est dek-it.be...
树莓派 1U 服务器 有些服务器托管提供商允许以低至 30 美元/月的价格托管 1U 服务器,但有一个问题:电源使用有限制(例如,1A @ 120v max),因为他们期待小型且节能的网络防火墙等设备。 这个 repo 是关于设计一...
LED矩阵显示器,带MAX7219× 1 公/母跳线× 1 软件应用程序和在线服务: BigClown bc-raspbian 手动工具和制造机器: 烙铁(通用) 这是一个无线矩阵LED显示屏,您可以放置在家中。连接USB充电器或移动电源,实现真正...
2. 在树莓派上安装 Node-RED 4. 创建第一个流程 1. Node-RED 的启动、停止、输出查看、自启动 2. Node-RED 的用户名/密码设置
操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习...
SPI通讯小结:轮询通讯:始终占用时钟1/32的频率(2.25Mbits/s),树莓派部分注意max_speed_hz的设置不要超过这个值即可中断通讯:SPI需
DigitalRaceDashSlim 设计用于本田S2000的Raspberry Pi的Digital Race Dash特征: 冷却液温度,进气温度,电池电压,STFT,LTFT,油门位置,发动机负载,火花提前,档位指示器,RPM(w / MAX),速度(w / MAX) ...
所需工具:Arduino Uno、任何可以运行 node.js 服务器的计算机(在这种情况下我使用的是树莓派)、中继模块、互联网访问 运行此应用程序的步骤: $npm install $node app.js 笔记: a) 你应该已经在你的电脑上...
门锁Oursky物联网门锁系统。 系统架构: (使用GNU Dia绘制)硬件使用此绘制。 图表另存为txt文件,您可以在File > Import From ...127.0.0.1max-load-1 = 24watchdog-timeout = 10watchdog-device = /dev/watchdogreal