不脱发的程序猿 发表于 2021-6-23 12:45:16

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

本帖最后由 不脱发的程序猿 于 2021-6-23 12:48 编辑

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

https://pic3.zhimg.com/v2-55cd444aa28f7efc0622c808ca49aae2_b.png

​项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html


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

https://pic3.zhimg.com/v2-3637cea4b4c3ad776da22652bff7406e_b.png

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

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

https://pic1.zhimg.com/v2-7ccd5999e348ab29b2af154b16e36e34_b.png
控制器之间IIC接口连线效果如下所示:

https://pic2.zhimg.com/v2-5c64fa1e9c693a3cab9dc9b975c59a05_b.png
控制器之间SPI接口连线效果如下所示:

https://pic4.zhimg.com/v2-2e507d5bf0146e4e0a5eb7737d8a907b_b.png
由于通常UART串口通信方式较为简单,是使用最多的通信方式。

另外使用以上通信接口配合通信模块,也可基于RS485、RS232、RS422、CAN、以太网等通信总线直接实现两个控制器之间数据通信。

https://pic4.zhimg.com/v2-d689f1f9eb9aef0d60e67ca7e5ba35f3_b.png

2、无线通信
无线通信主要依托于无线通信模块实现,例如局域网内常使用的蓝牙、Wi-Fi、ZIgBee等通信技术。

开发者只需要使用两块控制器驱动无线模块,即可实现无线数据收发,大多情况下无线通信模组都是基于UART串口通信进行驱动。

蓝牙通信模块如下所示:

https://pic3.zhimg.com/v2-601bd21346ee26f34e117806bb74e12a_b.png

ZigBee通信模块如下所示:

https://pic3.zhimg.com/v2-21c2b31891edd44aa6cd80305acb69da_b.png

WiFi通信模块如下所示:

https://pic1.zhimg.com/v2-bec49e4f697e8f6f4aafce62d755901c_b.png

3、串口点灯
通过一个案例,了解控制器之间使用UART接口实现数据通信。

由于我只有一块Arduino开发板,所以使用USB转TTL调试助手模拟控制器进行有线通信,效果如下所示:

https://pic1.zhimg.com/v2-a31e4b653afb2c76f47f870c7c5bdd4c_b.png

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

https://pic3.zhimg.com/v2-451a0a9077a4a2ca34cd4bed98a0b48a_b.png

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

https://pic1.zhimg.com/v2-4975fb40af428882961a6999b73eb4cc_b.png

页: [1]
查看完整版本: 和12岁小同志搞创客开发:两个控制器之间如何实现通信?