和 12 岁小同志搞创客开发:两个控制器之间如何实现通信?

机缘巧合在网上认识一位 12 岁小同志,从零开始系统辅导其创客开发思维和技巧。

项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html
本篇博客来讲讲如何实现两个控制器之间数据通信(考虑到创客基础问题,本文不讲解苦涩的通信理论技术),主要包括:有线通信和无线通信两种方法,具体区别如下图所示:

1、有线通信
控制器之间有线通信主要包括:UART 接口、IIC 接口和 SPI 接口通信,两者实现通信可理解是控制器驱动传感器的原理,只需要将总线对应连接,编写驱动程序,即可实现数据的收发控制。
控制器之间 UART 接口连线效果如下所示:

控制器之间 IIC 接口连线效果如下所示:

控制器之间 SPI 接口连线效果如下所示:

由于通常 UART 串口通信方式较为简单,是使用最多的通信方式。
另外使用以上通信接口配合通信模块,也可基于 RS485、RS232、RS422、CAN、以太网等通信总线直接实现两个控制器之间数据通信。

2、无线通信
无线通信主要依托于无线通信模块实现,例如局域网内常使用的蓝牙、Wi-Fi、ZIgBee 等通信技术。
开发者只需要使用两块控制器驱动无线模块,即可实现无线数据收发,大多情况下无线通信模组都是基于 UART 串口通信进行驱动。
蓝牙通信模块如下所示:

ZigBee 通信模块如下所示:

WiFi 通信模块如下所示:

3、串口点灯
通过一个案例,了解控制器之间使用 UART 接口实现数据通信。
由于我只有一块 Arduino 开发板,所以使用 USB 转 TTL 调试助手模拟控制器进行有线通信,效果如下所示:

通过串口软件发送数值 1 开启控制器 LED,发送数值 0 关闭控制器 LED,程序设计如下所示:

需要注意,Arduino 的编程中,串口输入与输出都是针对 ASCII 码值的,例如数值 1,ASCII 码值为十六进制 0X31,数值 0,ASCII 码值为十六进制 0X30。

版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/89995a8983be26851dad8e659】。文章转载请联系作者。
评论