Arduino中国 | Flamingo EDA

TAG | APC220

使用APC220实现Arduino无线数据传输那篇文章里,我们介绍了如何使用APC220模块在PC和Arduino间实现无线数据传输。那时我们使用的是厂家提供的USB适配器。,由于这个适配器只能接APC220模块,而不能起到其它的作用,或多或少觉得有些浪费。更加重要的是,为此我们得提供两个不同的套件,一个给Arduino使用,一个给PC使用,两者之间不能实现互换。

正是基于上面的这些问题,我们针对电子积木系列开发了一款USB转串口的适配器Serial Dongle,使用它就可以通过PC机来连接和使用各种基于串口的电子积木模块了,比如这里介绍的无线数传模块APC220。

APC220模块的使用可以参考使用APC220实现Arduino无线数据传输那篇文章,两者间的唯一区别只在于如何对USB虚拟出来的串口进行设置,以便能够使用厂家提供的设置程序RF-ANET来对APC220的各个参数进行调整。首先我们将USB转串口适配器Serial Dongle连接到PC机上,然后从设备管理器中找到该串口,并打开其属性设置窗口:

点击Advanced按钮打开高级属性设置窗口,我们需要从Com Port Number列表中为Serial Dongle设置一个较小的COM号(如COM5),否则厂家给的设置程序会出现无法打开该串口的错识。另一个需要修改的地方是BM Options中的延时设置需要从16改为更小的值(如8):

现在可以运行厂家给的设置程序了,此时特别需要注意的是操作顺序。应该先接好Serial Dongle,并将Serial Dongle右上角的开关拨到M的位置:

接着运行设置程序RF-ANET,最后再用连接线将APC220模块连接到Serial Dongle上,此时应该可以看到APC220设置程序窗口的最下面会显示Found device,表明APC220模块已经成功找到。如果设置程序没有找到APC220模块,可以试着断开APC220与Serial Dongle的连接,然后再次将APC220模块连接到SerialDongle上,直到设置程序成功找到APC220模块。

当APC220模块成功地被设置程序RF-ANET找到之后,我们就可以按照实际的需要来使用Serial Dongle对APC220模块进行各种参数配置了,而不再依赖厂家提供的USB适配器了;-)

至于随后的使用过程,那就完全一致了。一方面,我们可以将APC220模块通过4芯的串口连接线,与Arduino传感器扩展板相连接,这样Arduino就可以通过串口来操作APC220模块实现无线数据的收发:

另一方面,我们可以通过Serial Dongle连接APC220模块与电脑,并通过电脑的串口读写功能来操作APC220模块实现无线数据的收发:

下图就是利用两个APC220模块实现Arduino与电脑间无线数据传输的连接图:

· ·

在之前的文章中,曾经介绍了如何使用RF模块实现对Arduino的无线控制,其原理非常类似于遥控器,能够实现4个按钮的RF无线遥控。不过,对于要进行数据传输的场合,这样的解决办法就显得不太适合了,比如你要将Arduino采集到的光线传感器的数值,无线传输到PC机那端的时候。这种情况技术上称为无线数据传输,或者简称为无线数传。实现无线数传目前有不少解决方案,但最容易同Arduino连接使用的是类似于APC220这样通过串口来实现的无线数传,虽然数据传输的速度可能慢点(受限于串口的波特率),但的确不失为一种简单易用的方式,难怪很多网友都建议为Arduino加上这样的模块支持。

今天找出点时间来摆弄摆弄这个APC220了,厂家寄给我的模块没有任何说明,好在网络上能找到一些说明,另外就得自己摸索了。首先发现的问题是厂家给的USB适配器似乎于APC220不是很匹配:引脚的数目不一样。这个嘛,似乎不难理解,可能为了兼容不同的产品,或者至少可以说这一适配器不是为APC220专门设计的。USB适配器上用的芯片是CP2102,于是先到Silicon Laboratories网站下载相应的驱动程序,我下载的文件为cp210x_vcp_win2k_xp_s2k3.zip,解压缩后是一个exe文件,直接执行然后按照提示一步一步完成驱动的安装。

驱动安装完成之后,将USB适配器插入到PC机的USB接口中,Windows会提示找到相应的硬件,并对其进行相应的安装和配置:

当Windows提示你硬件已经可以使用之后,在设备管理器的“端口(COM 和 LPT)”下面可以找到CP2102虚拟出来的串口:

现在可以将一个APC220模块连接到USB适配器上了,由于USB适配器与APC220的引脚数目并不一致,连接时要注意插入的位置:

打开APC220厂家提供的设置程序RF-ANET,之前CP2102默认找到的串口为COM87,但RF-ANET程序似乎不能正常地打开这一端口。

在设备管理器中将串口设置成COM4后,重新插入USB适配器并打开RF-ANET,单击“Read R”按钮,一切正常,状态栏上显示“read succeed!”,表明已经能够正常地跟APC220通讯上了!

这样PC端APC220的测试环境就建议好了,现在来看Arduino这一端端。APC220模块与Arduino之间的连线有4条:5V, GND, TX和RX,需要注意的是,APC220和Arduino都是单独的串口设备,因此Arduino上的发送端TX应该与APC220上的接收端RX连接起来,同理Arduino上的RX应该与APC220上的TX连接起来:

APC220模块的默认波特率设置为9600,因此先用下面的代码来进行测试,注意在向Aduino下载程序时,先断开同APC220模块TX和RX上的连线,否则会出现下载无法正常的情况。

int val = 0;
int ledPin = 13;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  val = Serial.read();
  if (-1 != val) {
   if ('A' == val || 'a' == val) {
     Serial.println("Hello from Arduino!");
   }else if ('B' == val || 'b' == val) {
      digitalWrite(ledPin, HIGH);
      delay(500);
      digitalWrite(ledPin, LOW);
    }
  }
}

总结一下,现在我们已经分别在PC和Arduino上连接了一个APC220模块,并且已经向Arduino里面写入了相应的测试代码。一切都准备好之后,现在我们来进行相应的测试。首先要注意的是我们必须用外接电源的方式对Arduino进行供电,这是因为如果连接上USB线的话,相应的FT232模块会被激活,这样FT232实现的串口和ACP220上的串口就会因为冲突导致通信不正常:

在将加电后的Arduino放到房间里的一个角落之后,现在来配置PC端。APC220模块通过其USB适配器之后,其原理上也相当于一个串口,因此我们可以用Arduino自带的开发环境来进行测试,只是这一情况下你的PC上连接的不再是Arduino,而是APC220 USB适配器。连接好APC220 USB适配器后,打开Arduino,在“Tools” -> “Serial Ports”菜单下选择USB适配器虚拟出来的“COM4”(与之前的设置一致)。接着打开Arduino里的“Serial Monitor”,发送A字符,会收到Arduino传回来的“Hello from Arduino!”,发送B字符可以点亮Arduino上的13号LED(持续0.5秒):