这篇文章,主要是想了解底板到拓展板的通讯过程,结构就简单过一下。 esp8266模块通过两个双排19孔插排连接到拓展板,在PCB上标明了MCU连接方式和SOC连接方式。(MCU连接方式:ESP8266只作WIFI通讯,主要负责与其他单片机例如stm进行数据传输。SOC连接方式:ESP8266可独立工作,不仅负责WIFI通讯,还负责了外部传感器的控制) 我们可以从电路图看到MCU和SOC连接方式不同,插排的定义也不同,例如:SOC连接方式电机的pwmio由ESP8266控制,而MCU方式则是转接到底板由 STM32控制。 拓展板和底板均使用了CP2102作为USB转串口进行数据通讯,无需使用usb转ttl。各个模块的UART0连接着CP2102作为串口使用。当然能不能直接使用此串口作为固件烧录,文档并没有说明,有待尝试。 我们使用的Gokit3开发板,主要是使用MCU方式进行开发。ESP8266烧录的是机智云 GAgent固件,Stm32则是烧录由设备生成的MCU代码。
至此,简单介绍了开发板的结构,接下来我们讲一讲通讯过程。 机智云的Gokti3开发板,STM32负责数据获取和外设控制,由ESP8266负责进行与云端通讯。 所有数据通过UART进行传输,对于STM32来说,看着像是UART1,但是实际上是UART2,因为从代码可以看出UART2的波特率是9600与协议一致,而UART1是115200作为调试用。 使用串口工具看一下就知道了。 但是对于ESP8266,由于UART1被SPI占用,复用的话也只能作为调试信息输出使用。因此,实际连接的是ESP8266的UART0,从电路图上也可以看出。 现在我们知道了在电路层面上是通过串口进行数据传输的,那么代码层面上呢?
我们分别打开平台生成的STM32和ESP8266源码,虽然ESP8266的与agent固件不同,但大同小异。 首先是STM32的代码。 我们可以看出,数据发送由机智云编写的uartwirte发送,再经由hal层发送到uart2端口,最终发送给ESP8266接收。 数据接收则是由gizPutData函数处理 接下来我们看一看ESP8266的通讯代码
从此函数入手 转到了另一个函数 此函数包含在静态库里,具体的代码我们暂时无从得知。
再看另一个数据接收函数 非常明显,数据交给了PF_ReceiveDataformMCU函数处理,定位到此函数同样是一个静态库。 静态库我们无从得知具体的代码执行流程,那我们就无法在数据通讯的时候多一些自定义的功能吗? 其实不然,机智云的gagent固件也是遵循一定的协议开发的。 其中MCU协议就是我们要了解ESP8266内部数据处理需要的。
很可惜,这三份协议个人暂时无法获取到,只能从网络上找到一些蛛丝马迹。但是机智云还是为我们留下了后路,我们只要与机智云的商务联系,签约就有机会获得这三份协议,具体可以联系机智云咨询。
|