Argon带你用mqtt连OneNET,漂移菌带你跑Linux和驱屏幕

昨天我们看了圈圈和Rudy做的详细介绍 , 包括入门和连接阿里云 。今天我们来看看嵌入式网络工程师Argon讲述怎么连上另一个IOT平台——OneNET , 还有骑驴玩儿漂移的漂移菌带来的讲解以及他为大家准备的Github/Gitee仓库 。
Argon
自我介绍
很有幸参与到这次Digi-key和硬禾学堂联合举办的这次开发板体验活动 。我叫Argon , 来自浙江杭州是一名从事安防行业的嵌入式网络工程师 。从大学开始就对微电子充满了兴趣 , 在闲暇的时间也会利用手头的元器件自己搭建一些好玩的DIY产品 。
实现功能叙述
1. Seeed STM32MP1开发板教程(0)前期准备篇: https://blog.csdn.net/Argon_Ghost/article/details/109006612 2. Seeed STM32MP1开发板教程(1)Wi-Fi的使用: https://blog.csdn.net/Argon_Ghost/article/details/108986471 3. Seeed STM32MP1开发板教程(2)GPIO的简单操作: https://blog.csdn.net/Argon_Ghost/article/details/109009824 4. Seeed STM32MP1开发板教程(3)IIC设备AHT10的使用: https://blog.csdn.net/Argon_Ghost/article/details/108986562
心得体会
工作从事的一直Linux网络开发 , 公司对代码的封装较为良好很少涉及到需要手动去驱动外设的情况 。通过这次活动我自己手动去编译设备树 , 修改设备树文 。我对设备树以及linux内核的编译有了更深层是的理解 , 同时也要感谢@圈圈BG3MDO、@漂移菌 大佬的细心指导 , 编写驱动的过程也是我们共同探索的过程 。在十一期间的多个夜晚我们和大洋彼岸的圈圈大佬视频会议来探讨设备树相关的技术难点 , 也让我想起了大学期间在实验室熬夜攻关的日子 。非常感谢硬禾举办的这次体验活动 , 让更多的学生以及工程师能了解到ST等大厂最新的产品和技术 。希望之后硬禾多增加宣传活动的力度 , 这个活动我也是从朋友那里得知的 。之前对硬禾的了解非常有限 , 希望硬禾以此为契机来提高自己的知名度 。
漂移菌
个人介绍
我是李伟斌 ,  AKA 骑驴玩儿漂移 , 漂移菌 。我是伍艾信息科技的一名工程师 , 我的日常就是打杂 。长期使用树莓派 , 并熟悉 linux 的系统管理和网络应用 , 熟悉 python 编程和 C 语言编程 , 精通 shell 脚本编程 。在 STM32MP157C 上最先完成了一系列的 linux 系统级别的操作 。例如 , 配置 uEnv 。txt 并加载全驱动 dtb 并开启 wifi  , 联网后 , 更新了软件源 , 切换到清华国内的源 。安装了 vim 工具 , 编译工具等等 , 并进行了磁盘的扩展 , 默认磁盘空间大概只有 2GB , 通过计算和配置 , 将磁盘扩展到 32GB , 并通过 USB 接口实现了两个U 盘合并的磁盘整列 。软 Raid 。通过 stm32mp157c的 A7 核运行的 linux , 搭建了一个简易 web 和群友共享资源 。后面实现了点灯 , pwm 呼吸灯 ,  spi 驱动屏幕等操作 。
代码内容
1. 小夜灯 I2C 驱动(shell 脚本)
root@npi:/home/debian/bin# cat LED.sh
#!/bin/bash
while true
do
i2cset -y 1 0x15 0x01 0xff sleep 0.2 i2cset -y 1 0x15 0x02 0xff sleep 0.2 i2cset -y 1 0x15 0x03 0xff sleep 0.2 i2cset -y 1 0x15 0x04 0xff sleep 0.2 i2cset -y 1 0x15 0x05 0xff sleep 0.2 i2cset -y 1 0x15 0x06 0xff sleep 0.2 i2cset -y 1 0x15 0x07 0xff sleep 0.2 i2cset -y 1 0x15 0x08 0xff sleep 0.2 i2cset -y 1 0x15 0x09 0xff sleep 0.2 i2cset -y 1 0x15 0x0a 0xff sleep 0.2 i2cset -y 1 0x15 0x0b 0xff sleep 0.2 i2cset -y 1 0x15 0x0c 0xff sleep 0.2 i2cset -y 1 0x15 0x0d 0xff sleep 0.2 i2cset -y 1 0x15 0x0e 0xff sleep 0.2 i2cset -y 1 0x15 0x0f 0xff sleep 0.2 i2cset -y 1 0x15 0x10 0xff sleep 0.2 i2cset -y 1 0x15 0x11 0xff sleep 0.2 i2cset -y 1 0x15 0x12 0xff sleep 0.2 i2cset -y 1 0x15 0x13 0xff sleep 0.2 i2cset -y 1 0x15 0x14 0xff sleep 0.2 i2cset -y 1 0x15 0x15 0xff sleep 0.2 i2cset -y 1 0x15 0x16 0xff sleep 0.2 i2cset -y 1 0x15 0x17 0xff sleep 0.2 i2cset -y 1 0x15 0x18 0xff sleep 0.2 i2cset -y 1 0x15 0x19 0xff sleep 0.2 i2cset -y 1 0x15 0x01 0x00 sleep 0.2 i2cset -y 1 0x15 0x02 0x00 sleep 0.2 i2cset -y 1 0x15 0x03 0x00 sleep 0.2 i2cset -y 1 0x15 0x04 0x00 sleep 0.2 i2cset -y 1 0x15 0x05 0x00 sleep 0.2 i2cset -y 1 0x15 0x06 0x00 sleep 0.2 i2cset -y 1 0x15 0x07 0x00 sleep 0.2 i2cset -y 1 0x15 0x08 0x00 sleep 0.2 i2cset -y 1 0x15 0x09 0x00 sleep 0.2 i2cset -y 1 0x15 0x0a 0x00 sleep 0.2 i2cset -y 1 0x15 0x0b 0x00 sleep 0.2 i2cset -y 1 0x15 0x0c 0x00 sleep 0.2 i2cset -y 1 0x15 0x0d 0x00 sleep 0.2 i2cset -y 1 0x15 0x0e 0x00 sleep 0.2 i2cset -y 1 0x15 0x0f 0x00 sleep 0.2 i2cset -y 1 0x15 0x10 0x00 sleep 0.2 i2cset -y 1 0x15 0x11 0x00 sleep 0.2 i2cset -y 1 0x15 0x12 0x00 sleep 0.2 i2cset -y 1 0x15 0x13 0x00 sleep 0.2 i2cset -y 1 0x15 0x14 0x00 sleep 0.2 i2cset -y 1 0x15 0x15 0x00 sleep 0.2 i2cset -y 1 0x15 0x16 0x00 sleep 0.2 i2cset -y 1 0x15 0x17 0x00 sleep 0.2 i2cset -y 1 0x15 0x18 0x00 sleep 0.2 i2cset -y 1 0x15 0x19 0x00 sleep 0.2
done
2. 屏幕 ili9341 的驱动步骤简单讲述为:2.1 下载 seeed 官方主线内核
2.2生成.config 配置文件 ,  通过 zcat /proc/config.gz > .config
2.3编译内核并启用 framebuffer(小屏幕)fbtft_deivce 的驱动模块
2.4编译 , 建议交叉编译 , 我是直接在 mp157c 上进行编译的 , 时间为 244 分 34 秒2.5替换内核和安装驱动模块2.6挂载 spi 的 dtbo 设备树文件 , 并根据 dtbs 和 dtbi 文件找到引脚映射2.7 接驳设备并加载 fbtft_device 驱动2.8 利用 fbset 工具将终端映射到屏幕上: con2fbmap 1 1
3. OLED 0.96 屏幕驱动: 利用 luma 的驱动比较方便 , 通过python 驱动.避免了直接底层操作 I2C.
4. 创建了 github 和 gitee 的仓库 , 方便后续代码共享. https://github.com/stm32mp/157c.git https://gitee.com/yoyojacky/stm32mp157c.git5. PWM 驱动 , 使用了核间通信机制 , IPCC , 在选择了 PA3 脚并切换至 TIM2/CH2 , 通过 cubeIDE 生成了代码后 , 加入了 pwm 的函数 。5.1 点灯部分
/* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_WritePin(led0_GPIO_Port,led0_Pin, GPIO_PIN_SET); HAL_Delay(200); HAL_GPIO_WritePin(led0_GPIO_Port,led0_Pin, GPIO_PIN_RESET); HAL_Delay(200); HAL_GPIO_WritePin(led1_GPIO_Port,led1_Pin, GPIO_PIN_SET); HAL_Delay(200); HAL_GPIO_WritePin(led1_GPIO_Port,led1_Pin, GPIO_PIN_RESET); HAL_Delay(200); }/* USER CODE END 3 */5.2PWM 函数部分
void user_pwm_setvalue(uint16_t value){ TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = value; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);}/* USER CODE END 0 */?主程序部分写了个死循环
/* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ for(int i=0; i<2000; i+=20) { user_pwm_setvalue(i); HAL_Delay(10); } for(int i=2000; i>0; i-=20) { user_pwm_setvalue(i); HAL_Delay(10); } }
心得体会
对这次活动非常满意, 感觉很有意思!活动建议:希望项目可以继续持续下去 , 并且持续更新和持续开展不同level 的应用要求 , 例如 , 使用 ble  , 大家都用 ble 做应用 ,  使用核间通信 , 就都用核间通信来做应用 , 然后分析和交流 。
责任编辑:xj
原文标题:Funpack第一期精彩之二:Argon带你用mqtt连OneNET , 漂移菌带你跑Linux和驱屏幕
【Argon带你用mqtt连OneNET,漂移菌带你跑Linux和驱屏幕】 文章出处:【微信公众号:FPGA入门到精通】欢迎添加关注!文章转载请注明出处 。

    推荐阅读