0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过linux A7核心实现python驱动OLED屏幕进行显示

电子森林 来源:FPGA入门到精通 作者:FPGA入门到精通 2020-10-30 16:57 次阅读

Funpack第一期 - 好大一只荣哥哥自我介绍

姓名:好大一只荣哥哥

公司或学校:待业,换工作过程中(前任职单位;成都伊利乳业有限责任公司)

职务或专业及年级:待业人员(前任职单位:人力资源专员)

硬件介绍(控制器及外设,应用方向及应用场景) ODYSSEY – STM32MP157C

设计思路(用板子的哪些模块实现了什么功能)

通过M4核心通过GPIO控制呼吸灯。

通过linux A7核心实现python驱动OLED屏幕进行显示。

指定功能演示:

一、准备工作:软件:MobaXterm:可串口,可SSH,可以上传文件到系统板。 WinSCP:管理文件比MobaXterm更为方便快捷。 Etcher:写入固件到SD卡使用。 硬①系统板 ②USBtoTTL转接线、面包线若干(公对公,公对母、母对母都有准备) ③Type-C电源线(使用手机的充电器供电) ④LED三色灯 ⑤128*64 OLED屏幕 ⑥当然还有PC端

固件写入SD卡,通过TTL转接线连接(com端口要按wiki设置正确),通电从SD卡启动,修改启动dtb为full,重启后根据官方wiki进行WiFi设置。 更新系统

sudo apt update 安装 vim git ssh wget curl gcc make python3 python3-pip等常用工具:

sudo apt install vim ssh git wget curl gcc make -ysudo apt install python3 python3-pip -y 安装对应的内核头文件,可以直接在板上编译应用程序、内核模块、设备树,避免了前期搭建交叉编译环境的麻烦。

sudo apt install linux-headers-$(uname -r) -y

-----------------基础工作基本完成 ---------------- 二、第一个指定功能: 驱动LED灯亮,使其实现呼吸灯的效果;//使用STM32CubeTDE调试其M4核心实现。 首先,查看wiki文档,PA3引脚可设置PWM输出,则将LED插入PA3引脚,IDE中引脚相关设置: PA3引脚配置为M4核心使用,配置为TIM2_CH4;配置TIM2的Channel4为PWM Generation CH4,Prescaler修改为64-1,CounterMode修改为Up,CounterPeriod修改为1000-1,其余保持默认设置。

详见图片设置:

然后在main.c中进行代码的修改及编写: main函数如下:

int main(void){ /* USER CODE BEGIN 1 */ uint16_t dutyCycle = 0;//定义dutyCycle变量,初始值为0 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ if(IS_ENGINEERING_BOOT_MODE()) { /* Configure the system clock */ SystemClock_Config(); } /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);//PWM引脚输出模式 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { while (dutyCycle < 1000) { dutyCycle++; __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4,dutyCycle);//变量小于1000时,逐渐拉高 HAL_Delay(1); } HAL_Delay(100); while (dutyCycle > 0) { dutyCycle--; __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4,dutyCycle);//变量大于0时,逐渐拉低 HAL_Delay(1); } HAL_Delay(400); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */} 修改完成之后进行编译,在CM4/debug/目录下或者 CM4/Binaries/目录下均会生成相应的.elf文件。 转到MobaXterm进行固件的上传及启动操作。ssh端进入到 /lib/firmware/ 目录下

cd /lib/firmware/ 再执行:复制elf文件到此目录:

cp /home/debian/ronggege1_CM4.elf . 通过echo命令将固件进行启动准备:

echo ronggege1_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware 下面两条命令可开始或停止运行

echo start > /sys/class/remoteproc/remoteproc0/stateecho stop > /sys/class/remoteproc/remoteproc0/state 查看运行状态:

cat /sys/class/remoteproc/remoteproc0/state 三、第二个指定功能: 成功驱动SPI、I2CUART三个外设中的其中一个:驱动I2C -128*64 OLED屏幕,使其显示内容。 首先完成128*64 oled屏幕硬件连接,使用1,3,5,9引脚一对一连接:

安装i2c相关工具:

sudo apt-get install -y python-smbussudo apt-get install -y i2c-tools 在终端输入命令查看连接状态:

i2cdetect -y 1 安装Adafruit_Python_SSD1306库:

sudo apt-get updatesudo apt-get install build-essential python-dev python-pipsudo pip install RPi.GPIOsudo apt-get install python-imaging python-smbussudo apt-get install gitgit clone https://gitee.com/xingguangk/Adafruit_Python_SSD1306cd Adafruit_Python_SSD1306sudo python setup.py install

安装Luma.oled库:

sudo apt-get install python-dev python-pip libfreetype6-dev libjpeg-devsudo -H pip install --upgrade pipsudo apt-get purge python-pipsudo -H pip3 install --upgrade luma.oled

//luma.oled库安装较慢,需要多次重试。

安装好后我们新建一个oled.py文件,并粘贴以下内容(演示中是在Windows环境下创建好之后直接上传到debian用户根目录下)

from luma.core.interface.serial import i2c, spifrom luma.core.render import canvasfrom luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 # rev.1 users set port=0# substitute spi(device=0, port=0) below if using that interfaceserial = i2c(port=1, address=0x3C) # substitute ssd1331(...) or sh1106(...) below if using that devicedevice = ssd1306(serial) while 1: with canvas(device) as draw: draw.rectangle(device.bounding_box, outline="white", fill="black") draw.text((10, 30,), "Funpack ronggege", fill="white")

//第10行需要修改为所使用的屏幕的芯片型号,此处为ssd1306型号。

//第16行两位数字为左上角开始的坐标位置,可根据内容进行调整;双引号中为需要显示的英文字符串。 从git上的库中包含很多示例文件,可显示当前时钟,一些小游戏,图形等等。 在所在的目录下通过

python3 example.py 命令即可运行相应的程序进行内容显示。

心得体会 Funpack此次活动刚开始其实有点犹豫,因为对电路及程序开发很有兴趣,但是因为之前单只接触过Arduino,但还是在朋友的鼓(song)励(yong)下加入了进来。可能更多的还是这块板子的设计、架构等和树莓派等很像,可以实现智能家居等的确很吸引我。 作为一名人力资源从业者,这次跨行跨业加入这次活动,的确需要很大的勇气,从最开始的一脸懵,到现在也可以进行一些命令行操作,对linux和STM32开发也有了一个基础的了解和认知,虽然还是有一些程序的原理其实不是特别清楚,但是过程中遇到的很多问题可以从互联网平台寻找答案,眼前的浓雾在逐渐散开,也可以和朋友一起进步,这种体验真的很好! 最后,真的感谢硬禾的这次活动,能够认识到更多兴趣相仿的朋友,也锻炼自己的“跨界”的能力,希望后面可以逐渐搭建出相要的智能家居中心,但是这可能需要更多的时间,时间不停在前行,学习的脚步也不能停下来。

更多精彩视频分享请移步至硬禾学堂BBS论坛(也欢迎大家在本论坛里展开交流):https://bbs.eetree.cn/forum.php?mod=forumdisplay&fid=53

往期精彩

1. Funpack第一期开始Fund Back了,成功的同学都奔走相告,分享喜悦吧!

2. Funpack第一期精彩之二:Argon带你用mqtt连OneNET,漂移菌带你跑Linux和驱屏幕

3. 看顶尖芯片公司工程师写总结报告(Funpack第一期精彩之三)

责任编辑:xj

原文标题:HR都能将兴趣发挥极致,身为电子工程师的你还在犹豫什么(Funnpack第一期精彩之四)

文章出处:【微信公众号:FPGA入门到精通】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电子工程师
    +关注

    关注

    252

    文章

    767

    浏览量

    95597
  • Linux
    +关注

    关注

    87

    文章

    11222

    浏览量

    208889
  • 硬件
    +关注

    关注

    11

    文章

    3251

    浏览量

    66105

原文标题:HR都能将兴趣发挥极致,身为电子工程师的你还在犹豫什么(Funnpack第一期精彩之四)

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    简单认识高通A7 Elite专业联网平台

    当下,AI技术被广泛应用于各个领域,从智能手机、AI PC到智能家居、智能汽车等等,AI已经融入到我们生活的方方面面。不久前,高通推出首个利用边缘AI变革网络连接的商用平台——高通A7 Elite专业联网平台,通过赋能新型Wi-Fi联网终端,助力人们开启AI联网新时代,让
    的头像 发表于 11-21 10:23 97次阅读

    【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第二篇)串口打印+SPI_OLED显示

    第一件事情 --实现回调函数 都完成后,就是写OLED的初始化、字符显示等功能了 最终hal_enty的代码内容就为下图 其中oled_demo()
    发表于 11-09 01:30

    高通A7 Elite专业联网平台发布

    日前,高通技术公司宣布推出高通A7 Elite专业联网平台,这一开创性的无线联网平台通过边缘AI的集成,变革人们体验网络的方式。基于具备40 TOPS NPU处理能力的AI协处理器,该平台不仅提供更佳的Wi-Fi 7连接和网络性
    的头像 发表于 11-08 10:25 177次阅读

    tft屏幕oled屏幕哪个更好一些

    屏,是一种主动矩阵式彩色液晶显示技术。它利用薄膜晶体管来控制每个像素的亮度,通过改变电流来控制像素的开关,从而实现图像显示。TFT屏幕需要背
    的头像 发表于 10-21 16:48 930次阅读

    Linux设备驱动程序分类有哪些

    Linux设备驱动程序是操作系统与硬件设备之间的桥梁,负责实现硬件设备与操作系统之间的通信和控制。Linux设备驱动程序的分类繁多,可以根据
    的头像 发表于 08-30 15:11 431次阅读

    【xG24 Matter开发套件试用体验】物联网密码柜之驱动矩阵键盘和OLED显示

    +circuitpython进行开发,矩阵键盘驱动为自行编写,Oled驱动基于Adafruit SSD_1306库。 到本阶段为止已实现的功
    发表于 08-04 23:04

    STM32MP157两个A7核能跑两个系统吗?

    请问STM32MP157的两个A7核,能像其它双核CPU一样运行AMP模式:一个核跑Linux、一个核跑RTOS(或禅机)吗?虽然有一个M4核可以跑RTOS,但计算能力有点弱,不能满足需求。想再用一个A7核来跑实时计算任务。
    发表于 03-21 06:50

    告别LCD,新款iPhone SE将搭载OLED屏幕

    则是自发光屏幕通过发光材料层来完成显示。和LCD相比,OLED有很多明显的优势。   OLED屏幕
    的头像 发表于 02-21 00:18 3055次阅读

    盘点那些硬件+项目学习套件:STM32MP157 Linux开发板及入门常见问题解答

    Python。开发板配套教程用的版本是OpenCV 4.x,Python 3.x 10.MP1双核是如何启动的 mp1上电M4核心默认不启动,M4核心需要
    发表于 02-01 14:25

    屏幕拼接显示系统:实现高效信息传递的策略

    显示系统的核心策略,帮助读者更好地理解和应用这一技术。 一、明确信息传递目标 在使用大屏幕拼接显示系统之前,首先需要明确信息传递的目标。是为了展示产品、宣传品牌、还是
    的头像 发表于 01-26 14:28 453次阅读

    什么是oled显示oled属于液晶屏幕

    显示器中,每个像素都是一个发光二极管,可以独立发光。这种技术提供了更高对比度、更快的响应时间、更宽的视角和更低的能耗。 OLED显示器与传统液晶显示器(LCD)有一些重要的区别。首先,
    的头像 发表于 01-23 15:49 2399次阅读

    全志H3实现OLED显示

    悟空派可以通过26 Pin引脚扩充SPI、IIC、UART以及GPIO功能。 此次分享通过双排插座引出的SPI,利用Python进行经典的0.96寸
    发表于 12-15 13:48

    SF1 RISC-V Core 驱动OLED屏幕

    第1章 SF1 RISC-V Core 驱动OLED屏幕本次测评采用安路的SF1 RISC-V内核实现对SPI OLED
    发表于 12-10 10:26

    基于LVGL驱动OLED屏的FFT声音实时可视化

    本项目旨在利用LVGL驱动的 Xiao-expansion-board的OLED显示实现FFT声音数据的实时可视化。关键内容包括利用LVGL库在O
    的头像 发表于 11-25 14:20 3332次阅读
    基于LVGL<b class='flag-5'>驱动</b>的<b class='flag-5'>OLED</b>屏的FFT声音实时可视化

    RK3399 Ubuntu通过Python实现录音和播放功能

    本文基于IDO-SBC3968Ubuntu系统通过Python脚本实现录音和播放功能。IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器,支持4KHDMI2.0显示
    的头像 发表于 11-25 08:32 724次阅读
    RK3399 Ubuntu<b class='flag-5'>通过</b><b class='flag-5'>Python</b><b class='flag-5'>实现</b>录音和播放功能