无题
智能家居
MCU:stm32f103c8t6
项目在keil上进行移植创建开发
项目包含对下位机(MCU对外设数据读取与控制)和上位机(包含服务平台和APP端)的设计。下位机选取STM32作为MCU,外设有LED灯和温度传感器,OLED屏。上位机则选用中国移动旗下的OneNet平台作为服务器,考虑到未来物联网的开发大多数是基于手机APP的。使用QT利用socket套接字绑定云平台IP和端口号制作。
下位机外设驱动
ESP8266模块可以通过AT指令控制开发,总体开发速度快,难度较低
OLED模块使用IIC协议驱动显示
温度传感器采集温度信息
云平台使用
选择多协议接入使用MQTT,既可以上传数据也可以下发数据控制
创建的产品
注意设备ID,鉴权信息以及接入方式这3个属性
问题:
esp8266连接热点时存在问题
外设:0.96寸OLED,ESP8266,LED,温度传感器
ESP8266部分的代码主要是借助串口通讯AT指令与ESP8266模块(刷入AT固件的)与OneNet平台进行信息交互(包含ESP8266初始化、数据发送,指令发送和数据缓存清除等)将模块配置为仅作为客户端模式,即Station模式
1初始化DS18B20
2对DS18B20读数据
3对DS18B20写数据
MQTT
(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议(因此MQTT常用于物联网开发中的低功耗长期在线通讯),该协议构建于TCP/IP协议上。
实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:
- (1)固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
- (2)可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
- (3)消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。
PC性能监测
vscode开发
启动文件和链接脚本
makefile
难点,问题:
接收上位机数据:ringbuffer
解包:码头,功能码,数据位,数据,效验码,码尾;
1 | int main(void) |
操作系统(RTOS)
进程线程:通信
信号量,互斥锁
LINUX卡片电脑
遇到问题:编译驱动(.ko)时,在开发板上运行时报错 无法创建IIC设备
解决:Linux版本不对。 查看启动内核打印信息,看到在解析子节点时没成功,缺少时钟频率;
平台-设备-驱动总线模式
IIC驱动OLED
:i2c_transfer函数里的主体是什么?回答的是msg,其实应该是adapter和msg;
移植系统:uboot,kernel,rootfs
bootargs
是启动参数(Boot Arguments)的缩写,用于在 Linux 系统启动时向内核传递一系列的配置选项
1 | console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait |
bootcmd
是U-Boot(一个开源的引导加载程序,广泛用于嵌入式系统的启动)中的一个环境变量,它定义了系统启动时自动执行的命令。
1 | setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;' |
Framebuffer
Frame 是帧的意思,buffer 是缓冲的意思,这意味着Framebuffer 就是一块内存,里面保存着一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值
fb 是一种机制,将系统中所有跟显示有关的硬件以及软件集合起来,虚拟出一个 fb 设备,当我们编写好 LCD 驱动以后会生成一个名为/dev/fbX(X=0~n)的设备,应用程序通过访问/dev/fbX 这个设备就可以访问 LCD
实习
TBOX
DV - Design Verification 设计验证
DUT - Device Under Testing 被测单元
负载 - TODO
上位机软件 - TODO
OPENCPU 一般为 modem 集成模组,主要负责运营商相关业务,GPS 定位,以太网,WiFi模组控制等功能。
具体检测内容由具体项目硬件方案确定
上位机通信测试时,上位机通过 CAN 设备连接 DUT 的 CAN 接口,CAN 接口分为数据 CAN接口和通信 CAN 接口,其中:
⚫ 数据 CAN 以 100ms 周期向上位机上报 TBox 的相关信息,内容为各测试项的检测状态或检测结果。
⚫ 通信 CAN 以 100ms 周期向上位机上报固定报文,具体报文参照通信协议。
WIFI功能
检测 WiFi 模块是否工作正常。
DUT 的 WiFi 工作在 STA 模式下,主动连接负载的热点,并进行数据通信,若能成功通信则认为 WiFi 模块功能正常,将结果按照协议上报。
试验时要求 AP 的 IP 地址为 192.168.10.100,连接热点的 SSID 由 DUT 的配置文件指定,PWD固定为 64840808,DUT 连接 wifi 热点成功后,通过 ping 命令进行通信检测网络通路。
连接不上 wifi、获取不到 IP 超过 5 次或 ping 失败 30 次认为失败,重启 WiFi 模块重新检测。检测失败时,RSSI 也上报错误,不再保持之前的值。
GPS功能
DUT 定时检测 GPS 模块回传数据。正常工作时,GPS 模块初始化后每秒回传一次模块数据,若超过 5 秒未收到模块数据,则认为模块通信异常
USB功能
DUT 作为从机,负载作为主机,DUT 主动 ping 通负载验证能否正常通信。ping 通即认为通路正常,连续 5 次 ping 通失败则认为通路异常,将检测结果按照通信协议上报。其中 DUT的 IP 地址固定为 2.2.2.2,负载的 IP 地址固定为 2.2.2.3。
CAN
数据帧:大多数情况下使用的报文结构
从标识符长度上,又可以把数据帧分为标准帧 (11 位标识符 ) 和扩展帧 (29 位标识符 ) 。
数据帧由 7 个不同的位场组成:帧起始、仲裁场、控制场、数据场、 CRC 场、应答场、帧结束。
远程帧:用来向某一个节点请求数据
错误帧:任何单元,一旦检测到总线错误就发出错误帧
过载帧:用于先行和后续的数据帧或者远程帧之间提供附加延时,保证接收端能够来得及处理前面收到的数据,包括过载标志和过载界定符.
问题:
内存泄漏:
ringbuffer写入比读出快
器件功耗,精度问题
项目难点,解决
连接热点问题,项目开始选型阶段驱动模块太多(温度,湿度,光传感器,红外,压力,声音,摄像头),芯片资源不够,项目完成后对整个系统的优化,选用更高精度的器件,在设计电路板的时候加入抗干扰元器件,在软件设计方面少用延时函数,全局变量,考虑一些功耗问题。是否使用操作系统
介绍
汽车电子产品事业部,车载T-BOX,即远程信息处理控制单元,主要包括MCU,OPENCPU,AP
一
项目包含对下位机(MCU对外设数据读取与控制,连接云平台),上位机(手机APP)QT简易制作,云端(云服务平台接收下位机数据并下发命令)的设计。主要实现下位机,上位机,云的一个互通。
下位机选取STM32作为MCU,外设有LED灯和温度传感器,OLED屏。云平台则选用中国移动旗下的OneNet平台作为服务器,考虑到手机APP的更方便直接操作。使用QT利用socket套接字绑定云平台IP和端口号制作。
下位机外设驱动,ESP8266模块可以通过AT指令控制开发,总体开发速度快,难度较低,OLED模块使用IIC协议驱动显示,温度传感器采集温度信息
云平台使用,选择多协议接入使用MQTT,既可以上传数据也可以下发数据控制,创建的产品,注意设备ID,鉴权信息以及接入方式这3个属性
整个项目在keil上进行移植开发,主要学习一些简单的外设驱动,和了解一些通信协议,掌握嵌入式开发的基本知识
二
一个显示 PC 运行状态监测的站台,通过上位机将 PC 端的 CPU 温度、CPU 占用率、内存占用率、GPU 温度和实时网速等信息采集后下发到模块,模块通过 OLED 将其显示出来。
上位机是一个带有串口收发功能的开源上位机(hardware monitor),下位机即开发板,自己设计打板(c8t6,OLED(spi),LED,USB,引出下载调试引脚)
整个项目在vscode上进行开发,运行rt-thread操作系统,
主要学习了解一些实时操作系统的相关知识,包括进程线程,系统调度,程序运行的一个流程。包括启动文件,链接脚本,makefile,ringbuffer接收数据,数据包解包,码头,功能码,数据长度,数据,效验码,码尾,多少个线程,线程优先级,信号量,互斥锁