物联网 = 嵌入式 + 网络
网络:Lora一对多、Zigbee一对多
项目框架
1、数据组织形式
定义好数据通信协议(自学Modbus通信)
2、UI设计
frame buffer
3、数据存储
数据量:一包?
频率:一天?
存储策略:数据库?文件?
存储方式,若是数据库存储,考虑怎么维护
4、WEB数据查询
B / S WEB服务器 —— http HTML
服务器并发:
多进程
多线程
select
poll
epoll
5、云服务器数据上传
MQTT协议、数据发布
6、软件框架 :并行或者串行
多进程?进程间通信 —— 方法、原因
多线程?线程间通信 —— 方法、原因
frame buffer—— 帧缓存、帧缓冲技术
FrameBuffer是一种Linux系统下为应用层图像显示专门提供的一套接口,通过内存映射技术,对显存空间进行数据(RGB颜色值)写入,通过RGB颜色值,在显卡中进行转换最终汇集到显示屏上。
FrameBuffer,可以译作"帧缓冲",有时简称为 fbdrv。这是一种独立于硬件的抽象图形设备。是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。
只要在Linux操作系统上,都具备frame buffer技术,面向文件描述符。
内存映射的本质:将两块虚拟内存空间映射到一个物理内存空间
RGB
RGB888
红、绿、蓝各占8位,即总共3个字节可以描述——>32bit操作系统 用4字节读
故应该偏移四个字节
例:
16进制描述四字节红色:0x00FF0000
RGB565
用两个字节可以表示
显示设备操作
#include <sys/ioctl.h>
int ioctl(int fd, int request, ...);
ioctl(fd, FBIOGET_VSCREENINFO, &vinfo); //获取屏幕信息(可变)
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
功能:内存映射
参数:
addr:欲映射内存的起始地址,NULL表示系统自动选定,映射
成功后返回该地址
length:映射内存大小
prot:映射区域的保护方式(读/写/执行/不能存取)
flags:影响区域映射的各种特性
MAP_SHARED:对映射区域写入的数据会复制回源文件内,
而且允许其他映射该文件的进程共享
MAP_PRIVATE:对映射区域的写入操作会产生一个映射文件的复制,
即对此区域的任何修改都不会写回原来的文件内
fd:要映射的目标文件
offset:文件映射的偏移量(0代表从开头开始)
返回值:
void * :返回映射欲映射内存的首地址
eg:
unsigned int* addr = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
int munmap(void *addr, size_t length);
功能:解除内存映射
参数:
addr:映射内存的地址
length:映射内存大小
串口
接入Linux系统为文件 去ls / dev下看
端口:COM
读数据:
1、打开设备文件
2、设置串口通信参数
波特率:9600、115200(bps 每秒传输的数据位数),两个通信设备波特率要一致
数据位:5、6、7、8,常用8位
停止位:1、2、1.5,常用1位(结束标志)
校验位:奇校验、偶校验、无校验
3、通过串口读写数据
4、关闭串口