完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、基本概念
在开始讲解前,先来看几个基本概念,如果是有基础的大佬,请直接跳到下一节。 上位机与下位机 上位机是指可以直接发出操控命令的计算机,而下位机是直接控制设备获取设备状况的计算机。 上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般模拟量),转化成数字信号反馈给上位机。 简言之如此,真实情况千差万别,但万变不离其宗。上下位机都需要编程,都有专门的开发系统。 换个角度,两个Arduino开发板,用其中一个控制另一个,发送指令的控制方就是上位机,被控制的就是下位机。 我个人用的比较多的是用Jetson Nano或树莓派做上位机控制下位机Arduino。 串口 既然要控制,就要有数据传输,也就要有“高速公路”,专业名称叫串行通信接口或串行通讯接口(通常指COM接口) 在使用Arduino前,需要安装驱动,这个驱动一般是CH340,驱动装好后,我们就可以在电脑上查看其对应的串口了: 数据表达 我们人与人交流需要语言,比如,中国人用汉语,聋哑人用手语等 机器之前的交流也需要语言,在经典计算机中,通过二进制0与1表示数据,这其中又有许多的表示数据的方法,如ASCLL码、BCD码等等 在下位机Arduino中,可以通过Serial.read()从串口的缓冲区取出并读取一个Byte的数据,比如有设备通过串口向Arduino发送数据了,我们就可以用Serial.read()来读取发送的数据。 在上位机中,可以通过Python库pyserial的write()方法来实现向串口发送数据,注意,发送的数据需要是Byte。 二、下位机程序 以垃圾分类为例,假设使用Arduino制作的机械臂投放垃圾。我们可以做4种处理,以此将垃圾投放到4种垃圾箱中。 void setup(){ Serial.begin(9600); pinMode(13, OUTPUT); } char contral; void loop(){ if(Serial.available()>0){ contral = Serial.read(); Serial.println(contral); if(contral==48){ Serial.println("Harmful"); digitalWrite(13, HIGH); // 点亮LED delay(2000); // 等待2秒钟 digitalWrite(13, LOW); // 通过将引脚电平拉低,关闭LED } else if(contral==49){ Serial.println("Kitchen"); } else if(contral==50){ Serial.println("Other"); } else if(contral==51){ Serial.println("Recyclable"); } } } 字符“0”的ASCLL码是48,以此类推,用0~3分别表示有害垃圾、厨余垃圾、其他垃圾以及可回收垃圾 为了测试时的效果更明显一些,这里我们设置当下位机接收到处理有害垃圾的信号时,让13号引脚的灯亮2秒,与此同时向串口输入“Harmful”: 到目前为止,Arduino已经可以接收串口的数据并进行处理了,但是串口里的数据是我们从键盘手动发送的,我们需要用上位机给他发送数据。 三、上位机程序 这里我们用个人PC端做测试。 import serialArduino = serial.Serial('COM3', 9600, timeout=0.2)send_data = b'0'while True: Arduino.write(send_data) 代码不多,也很简单,需要注意的是要在数据前加一个小写字母b,表示bytes字符串: 四、总结 其实实现的思路和过程不是很难,但是需要注意一些细节,比如下位机Arduino接收数据的编码方式,还有上位机发送数据的编码方式。 基于此,你就可以开发多个单片机联动的项目啦~ |
|
|
|
只有小组成员才能发言,加入小组>>
2565 浏览 0 评论
762浏览 1评论
521浏览 0评论
275浏览 0评论
456浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 10:35 , Processed in 2.075074 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号