通过haas了解SPI,并在OLED上显示hello world

这篇博客介绍了如何通过SPI接口在Haas平台上与OLED显示器进行通信,展示如何初始化SPI连接、创建SPI对象并配置OLED显示设备。作者详细讲解了SPI的工作模式、信号线功能以及如何使用SPI类进行读写操作。通过sh1106.py库,实现了在OLED屏幕上显示'Hello World'的示例代码。
摘要由CSDN通过智能技术生成

通过haas了解SPI,并在OLED上显示hello world

SPI

SPI通讯线路介绍

SPI信号数量共有4个,由1个主设备可以链接N个从设备,通过CS线(片选信号,连接主、从设备,通过选择不同的CS信号,来达到选择与哪个从设备通信的效果)连接到从设备,SCLK为时钟信号,可以控制工作速率的大小;MOSI为从主设备输出数据到从设备的线路,MISO相反。

image-20221110142540880

SPI多设备通讯介绍

普通连接

主设备与多个从设备连接时,为N个CS线,1个SCLK\MOSI\MISO线,如图所示与其他设备进行连接,需要注意的是,SPI只能一个接一个的与从设备通讯,当给CS0置低电平,CS1置高电平时,则与CS0进行通讯

image-20221110143128757
菊花链连接
image-20221110143527463

SPI工作模式

由时钟极性CPOL、时钟相位CPHA组合而成

image-20221110144108391

CPOL=1时,空闲阶段为高电平、CPOL=0时,空闲阶段为低电平;CPHA=1,第一个沿进行采样(CPOL=1,为下降沿,CPOL=0,为上升沿),CPHA=0,为第二个沿进行采样

image-20221110144705643

标准为在一根线上传输数据,即一个Byte(一个字节有8位)的8个bit在一根线,Dual SPI将一个Byte分为两根线进行传输,如下图所示,QualSPI同理

image-20221110144726416 image-20221110144855532

SPI与OLED的配合调用

OLED在Haas里面的管教连线

image-20221114183011358

SPI类的创建与打开

from driver import SPI
spi = SPI()

如果创建成功,返回SPI对象,创建失败抛出ENOMEN异常

Board.json的配置

image-20221114183415081

Board.json
{
  "name": "board-name",
  "version": "1.0.0",
  "io": {
      "spi_bmp280": {
      "type": "SPI",
      "port": 3,
      "mode": "master",
      "freq": 200000      }
  }
}

image-20221114183513656

通过SPI.open(node)打开对象,通过SPI.close()关闭SPI设备,成功则返回值0

SPI类读写

SPI.read(buf),功能从SPI总线接收数据,返回0or正整数:为真实接收到的数据

SPI.write(buf)向SPI总线发送数据

SPI.readAfterWrite(buf, data)

属性字段数据型必选项?字段说明
bufbytearry接收数据的存储数组,期待接收的字节数为buf的长度
databytearry发送数据的存储数组,期待发送的字节数为data的长度。

利用SPI通讯在OLED上显示

本次小实验需要使用sh1106.py芯片库文件,现已上传到CSDN,可供下载

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import time
from driver import SPI
from driver import GPIO
import sh1106
# OLED屏幕示例
def oled_init():
    print("oled init")
    oled_spi = SPI()
    oled_spi.open("oled_spi")

    oled_res = GPIO()
    oled_res.open("oled_res")

    oled_dc = GPIO()
    oled_dc.open("oled_dc")
    
    global oled
    oled = sh1106.SH1106_SPI(132, 64, oled_spi, oled_dc, oled_res)
    oled.fill(0)
    oled.text('Inite....', 2, 24, 1)
    oled.show()
    time.sleep(10)


def oled_test():
    global oled
    while True:
        print("------------Oled test---------") 
        oled.fill(0)
        oled.text("Hello", 10, 2, 1)
        oled.text("World", 50, 16, 1)
        oled.show()
        print("Hello world")
        time.sleep(5)
        print("---------test end--------------")


if __name__ == '__main__':

    oled = None
    oled_init()
    oled_test()









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值