零、介绍

该仓库是合肥万物以网科技有限公司的支持阿里云IOT的通用终端设备的C代码库。硬件方案是STM32+CAT1+WIFI+BT,其中可以通过CAT1或WIFI连接到阿里云IOT。

一、概述

ATOL_DC10是万物以网开发的一套通用的阿里云IOT物联网通用的终端设备,建设了完整的硬件平台和软件平台。在后续的开发中可以在硬件及软件平台上做相应的业务开发即可。欢迎大家借鉴或使用,并承接各种物联网开发。

实测测试数据:

  1. 20台ATOL_DC10,连续在线6个月,平均每台设备掉线4次,之后立马重连。
  2. 20台ATOL_DC10,连续在线6个月,每分钟定时上传数据,迄今无数据丢失。

二、硬件结构

  1. MCU
    STM32系列,当前代码是基于STM32F1xx,后续持续更新STM32F4xx,STM32Gxx。
  2. CAT-1 通信模块
    当前支持移远ECxx系列,例如EC200S、EC200U、EC600S等,另外也兼容CAT-4模块,例如EC20。
  3. WIFI 通信模块
    当前支持上海庆科MX3080,后续扩展支持乐鑫和安信可。
  4. 蓝牙模块
    当前支持汇承全系列。
  5. MP3播放模块
    支持串口接口的语音播放模块。
  6. RS485总线
    当前电路板上没有做隔离,在实际开发中会根据具体的场景来增加隔离。
  7. CAN总线
    当前电路板上没有做隔离,在实际开发中会根据具体的场景来增加隔离。
  8. 电力载波模块
    参考ATOL_L10E设备,支持三相电力载波通信。
  9. DI DO AI
    4路 DI,是4路光耦输入电路。
    4路 DO,是4路继电器输出电路。
    2路 AI,是2路ADC采集电路,支持普通电压采集和4-20ma信号采集。
  10. 定位模块
    使用通信模组内部GNSS或者增加GNSS的外挂芯片,支持北斗&GPS。可以做单频普通定位精度(10米级)和双频差分高精度(厘米级)。
  11. 其他外设或芯片
    例如SPI的RN8206的计量芯片,I2C的OLED屏幕等。

三、软件架构

1)概述

该版本使用了RTOS系统,FreeRTOS在这几年上涨的趋势非常明显,另外也免费。该代码选择了FreeRTOS,堆栈选择heap4。整个软件结构分为kernel、firmware、thread、service等四层,可以理解为从下至上的叠加关系,在具体的service层中所需要执行的业务都是下层的组合关系。这样统一设备型号之间的底层硬件或数据操作,减少开发工作量。

2)宏控

在all_head.h的头文件中,增加设备宏控,来选择所需要的硬件外设。另外也有通信方式的宏控,可以通过选择不同模组厂家的宏控来直接调用对应的硬件外设和固件。

3)kernel层
  1. kernel_usart1-3,使用DMA,在接收数据后存入到串口MQ中,和数据消费者解耦合。
  2. kernel_uart4,使用DMA,蜂窝通讯专用串口,也可以修改为其他串口,但是不建议。
  3. kernel_uart5,DEBUG串口,输出系统运行信息。
  4. kernel_watchdog,硬件看门狗。
4)firmware层,可以理解为固件层或者是某个外设的驱动层,是能实现硬件的基本操作和控制的,能提供给上层的数据控制接口。
  1. firmware_gpio,引脚的AI DI DO的定义,以及相关的控制。
  2. firmware_led,指示灯,对外提供一个控制灯闪烁的数组。
  3. firmware_rs485,在这里增加485的使能引脚在收发中的控制。
  4. firmware_flash,STM32的FALSH是按照片区操作的,经过封装之后可以提供按照non flash类似的函数。
  5. firmware_mp3,串口语音播放外设的串口接口,封装相关的协议。
  6. firmware_bluetooth,蓝牙通信接口,在汇承蓝牙中除了串口通信以外还有KEY引脚的控制。所以没有放在kernel层。
5)thread层,这个就是实现某个类型业务的线程,在另外的状态机版本(无rtos)的软件中,该层的实现不是靠建立线程来执行。
  1. thread_4g_comm_init,4G通信模组的初始化和连接阿里云的线程,只在初始化时候执行,执行完成之后没有挂起。
  2. thread_bluetooth,蓝牙的协议解析和数据业务。
  3. thread_state_machine,状态机线程,读取状态机MQ来执行对应的业务。
  4. thread_decoder,数据解码业务,读取串口4的接收MQ,来解析和阿里云IOT通信的相关数据,不同的模组厂商的指令不同。可以宏控中设置。
  5. thread_encoder,数据编码业务,根据所需要发送的数据合成相应的AT指令,不同的模组厂商的指令不同。可以宏控中设置。
  6. thread_timer,时间线程,可以计时以及在特定时刻触发相关状态,该版本没有用RTC。
  7. thread_wifi_init,wifi模块的初始化线程。
6)service层,这个是不同型号的具体业务层,包含各自的具体逻辑业务、数据解码编码、外设控制等。这里不展开说明。

四、应用场景

该硬件及代码充分考虑了主流的物联网接入方式和主流的厂商平台,可以根据客户的需求快速开发相关的业务。当前已经实现下面的产品功能:

1)工业现场类
  1. 工业现场的DTU设备
    把现场总线例如RS485、RS422、RS232、电力载波、CAN等数据和私有云连通、支持TCP\UDP、MQTT方式上云。在DTU内部可以集成modbus协议或者私有协议。
  2. 工业现场的控制设备和数据采集设备
    包含DTU功能的同时,能开放DI DO AI等外设接口,也可以在设备中增加逻辑控制业务。
  3. 数字工厂,已嵌入的方式把工厂的控制器、执行器、采集器、传感器等数据上传到云端,建立完整的工厂监测和数据挖掘云平台。
2)日常生活类
  1. 汽车、单车控制器
  2. 数字农业,已嵌入的方式把农业中的传感器、执行器等数据上传到云端,建立农业养殖种植的全生命周期管理。
  3. 电气安全监测及预警,通过边缘计算以及云平台的大数据挖掘,能对电气设备和线路的历史溯源及细小颗粒数据分析,能在把预警提前到1-6个月。
  4. 接入阿里智能,阿里云生活平台,提供阿里智能APP,主要面向智能家居方向。
  5. 接入天猫精灵,主要面向智能家居方向。