• 开源项目-十六进制协议传感器自适应缩放曲线显示终端(百问网imx6ull & 小熊派结合)...


    点击上方“嵌入式应用研究院”,选择“置顶/星标公众号

    干货福利,第一时间送达!

    来源 | 嵌入式应用研究院

    整理&排版 | 嵌入式应用研究院

    周末两天深圳由于疫情开启了静默模式,因此没办法出去玩耍啦!既然没法出去,躺平是不可能的,那么,肝起来!此次给大家带来的一个开源项目自适应曲线缩放传感器显示终端,废话不多说,上视频:

    这是刚开始做的效果:

    新增加功能:

    开源仓库:

    1. https://github.com/Yangyuanxin/QT-Sensor
    2. https://gitee.com/morixinguan/QT-Sensor

    获取方法:

    1. git clone https://github.com/Yangyuanxin/QT-Sensor
    2. git clone https://gitee.com/morixinguan/QT-Sensorg
    该项目功能仍不完善,还需持续维护,敬请期待!
    1、上位机部分

    b300bfc3bd9bdd64d357ab093c759f2f.png

    570f68e24fd0ffedb6e69b0ee1e60b92.png

    项目的上位机部分采用QT5开发,QT在嵌入式跨平台应用来说真的是YYDS啦,因此界面和逻辑都可以在Window端开发完成,整体代码结构如下:

    6c2af9e15de1a3c5d74c56a118370cc1.png

    最终选择移植到的是韦东山老师的百问网imx6ull开发板,通信方式选择USB虚拟串口来实现,即通过在Linux内核中配置虚拟串口,如下图所示:

    f27d3a6aa11d7d7ba1a9deaa66a08376.png

    重新编译内核,下载到开发板后,USB口就可以当串口来使用了!具体体现的设备节点是:

    1. /dev/ttyUSB0
    2. /dev/ttyACM0
    3. /dev/tty...

    我自己的板子上看到的是这样的:

    f78fb0a68a24732451f10bc65166d207.png

    QT的上位机编写完成以后需要进行交叉编译,这样才能够移植到开发板上使用,具体步骤参考:

    手把手之如何在嵌入式Linux上运行QT应用程序(以百问网imx6ull开发板为例)

    另外,在使用这个程序的过程中发现LCD的背光太亮了,于是我就实现了一个调节背光的函数,这样就可以让背光降到较为舒适的亮度,具体实现如下:

    1. int MainWindow::SetBacklight(int Level)
    2. {
    3.     int Ret = -1;
    4.     FILE *Fp = NULL;
    5.     char Buf[10] = {0};
    6.     Fp = fopen("/sys/class/backlight/backlight/brightness""w");
    7.     if(NULL == Fp)
    8.     {
    9.         printf("fopen backlight dev fail!\n");
    10.         return -1;
    11.     }
    12.     snprintf(Buf, sizeof(Buf), "%d", Level);
    13.     Buf[strlen(Buf)] = '\0';
    14.     Ret = fwrite(Buf, strlen(Buf) + 11, Fp);
    15.     if(1 != Ret)
    16.     {
    17.         printf("fwrite fail!\n");
    18.         return -1;
    19.     }
    20.     fflush(Fp);
    21.     fclose(Fp);
    22.     Fp = NULL;
    23.     return 0;
    24. }

    背光设置的亮度设置为3就可以了,不会因为屏幕太亮而伤眼睛。

    2、设备端部分

    设备端采用小熊派开发平台+E53传感器扩展板+自定义十六进制通信协议实现。整体代码结构如下:

    13f12126e2ea1044418b0b00e32a564c.png

    目录设计思路请参考我之前的文章:

    开发者成长激励计划-基于TencentOS Tiny FDM 3D打印机云控制系统方案

    2.1、通信协议
    帧头数据长度传感器类型数据高位数据低位校验和高位校验和低位
    1 Byte1 Byte1 Byte1 Byte1 Byte1 Byte1 Byte

    帧头:固定为0xAA

    数据长度:从传感器模式一直到数据低位

    传感器类型:默认为0,即为MQ-2气体传感器,具体类型如下表所示:

    传感器类型含义
    0E53_SF1 MQ-2气体传感器
    1E53_SC1 Bh750光强传感器
    2待添加
    3待添加

    数据高位:(AD_Value & 0xFF00) >> 8

    数据低位:AD_Value & 0x00FF

    校验和高位:((传感器模式 + 数据高位 + 数据低位) & 0xFF00) >> 8

    校验和低位:(传感器模式 + 数据高位 + 数据低位) & 0x00FF

    设备端默认以100ms频率上报。

    2.2、结构体定义与数据打包
    2.2.1、结构体定义
    1. typedef struct SensorProtocol
    2. {
    3.     uint8_t  FrameHeader;       //帧头
    4.     uint8_t  Length;            //数据长度
    5.     uint8_t  Type;              //传感器类型
    6.     uint8_t  ValueHBit;         //数据高位
    7.     uint8_t  ValueLBit;         //数据低位
    8.     uint8_t  ChecksumHBit;      //校验和高位
    9.     uint8_t  ChecksumLBit;      //校验和低位
    10. }SensorProtocol;
    11. SensorProtocol Protocol;
    2.2.2、数据打包
    1. void SensorProcolPacket(uint8_t Type, uint16_t val)
    2. {
    3.     Protocol.FrameHeader = 0xAA;
    4.     Protocol.Length = sizeof(Protocol.Type) + \
    5.                       sizeof(Protocol.ValueHBit) + \
    6.                       sizeof(Protocol.ValueLBit);
    7.     Protocol.Type = Type;
    8.     Protocol.ValueHBit = (val & 0xFF00) >> 8;
    9.     Protocol.ValueLBit =  val & 0x00FF;
    10.     Protocol.ChecksumHBit = ((Protocol.Type + \
    11.                               Protocol.ValueHBit + \
    12.                               Protocol.ValueLBit) & 0xFF00) >> 8;
    13.     Protocol.ChecksumHBit = (Protocol.Type + \
    14.                              Protocol.ValueHBit + \
    15.                              Protocol.ValueLBit) & 0x00FF;
    16. }

    目前设备端仅支持E53_SF1(MQ-2气体传感器)以及E53_SC1(光强传感器),后续待持续添加。

    后续,请持续关注Git仓库,敬请期待,好了,我要继续干活了!

    往期精彩

    深圳云之手科技开源炫酷RGB灯板DIY项目

    开源STM32产品:无线点菜宝使用评测

    STM32F103产品级开源项目:iLook.Time设计解读

    一个超酷的开源uHand2.0机械手掌项目

    觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

  • 相关阅读:
    【Hive-小文件合并】Hive外部分区表利用Insert overwrite的暴力方式进行小文件合并
    Android-S Emulator
    银行转账p图在线制作生成,回执单凭证,工商农业邮政建设,易语言画板!
    CAN总线入门必看:如何运用虚拟驱动编写测试脚本
    【牛客网-前端笔试题】——HTML专项练习
    CH2--x86系统架构概览
    htb-nineveh
    动态链接库(扩展)--实际开发时的注意事项
    深入理解Spring Boot AOP:CGLIB代理与JDK动态代理的完全指南
    前端构建工具(webpack&vite)
  • 原文地址:https://blog.csdn.net/morixinguan/article/details/126697186