串行,UART和Android,与微控制器的连接

图片

我们的主题:


Android 4.1.1平板电脑“ DNS AirTab M101w”和以下设备:
1. Tiva C系列TM4C123G LaunchPad
2. Stellaris LaunchPad EK-LM4F120XL板
3. Arduino MEGA 2560开发板
4.板载MSP430 LaunchPad,M430G2553

现在,按顺序,我们将所有这些板通过USB OTG连接到平板电脑,并尝试与它们建立连接,而无需诉诸root访问。

主题1. Tiva C系列TM4C123G LaunchPad


板上有一个微型USB“ DEBUG”连接器,以及一个RGB LED,我们将与它们一起玩。
以下草图是通过Energia IDE上传的:
char data = ' '; //    boolean rs, gs, bs = false; //   void setup() { //  pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT); Serial.begin(9600); // Serial    9600 } void loop() { if (Serial.available()){ //    data = Serial.read(); //  switch (data){ //  case '1': rs = !rs; break; case '2': gs = !gs; break; case '3': bs = !bs; break; } //  digitalWrite(RED_LED, rs); digitalWrite(GREEN_LED, gs); digitalWrite(BLUE_LED, bs); //    Serial.print("RGB="); Serial.print(rs); Serial.print(gs); Serial.println(bs); } } 


就我而言,当连接到平板电脑时,tty1-1:1.0文件出现在/ dev / usb /目录中。 让我们尝试在终端仿真器中注册以下内容:
 $ echo 2 > /dev/tty1-1:1.0 $ read s < /dev/tty1-1:1.0 $ echo $s RGB=010 


然后,出乎我意料的是,绿灯亮了,我看到了一条输出线。 为什么出乎意料? 因为我忽略了预配置连接,所以将手指戳向天空,但是效果如何! 我们不会对此进行详细说明。 但是我要说的是,在内核的不同版本中,这些板的定义将有所不同,并且您无法想象没有拐杖的单个命令行(是的,Linux很普通)

在玩了一些颜色后,向所谓的COM端口发送了不同的数字,我开始寻找一种通用的Android解决方案。 Google Play上有很多用于“串行UART”的工具,并且大多数应用程序都可以与德州仪器(TI)的玩具一起使用。 但是我寻找与开放源代码兼容的线程的尝试几乎没有成功。 对于Arduino,我发现了一个很酷的库,但下面的内容更多...

主题2:Stellaris LaunchPad EK-LM4F120XL板


据我了解,这是我们第一个测试主题的先前版本,其行为与android完全相同。 但是,当尝试填写草图时,当前的Energia 0101E0010无法看到该主板(Windows 8)。
 No ICDI device with USB VID:PID 1cbe:00fd found! Failed! 


因此,我只是打开了最终二进制路径到控制台的输出,并使用LM Flash Programmer手动加载了它。

主题3:Arduino MEGA 2560开发板


让我们稍微改变一下草图,我们将只用一个LED闪烁。
填充Arduino IDE
 #define LED 13 char data = ' '; boolean ls = false; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()){ data = Serial.read(); switch (data){ case '1': ls = !ls; break; } digitalWrite(LED, ls); Serial.print("LED="); Serial.println(ls); } } 


我们连接到平板电脑,再次在/ dev / usb /目录中看到tty1-1:1.0文件,我们重复实验:
 $ echo 1 > /dev/tty1-1:1.0 

然后我发现LED闪烁2次,持续约100毫秒,然后熄灭。 好的,我正在尝试以下操作:
 $ read s < /dev/tty1-1:1.0 

然后终端冻结了...好吧,Ctrl + C
 $ echo $s 

逻辑上说输出中什么也没有。

但这只是一个介绍,有一个很棒的项目Physicaloid Library 。 首先,在Eclipse中将库作为普通的android项目打开。 现在创建一个新项目,并在其项目android中的属性中,库单击添加...,然后选择Physicaloid库。 现在,按下按钮以将字符串“ 1”发送到arduino:
 public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: mPhysicaloid = new Physicaloid(this); if(mPhysicaloid.open()) { byte[] buf = "1".getBytes(); mPhysicaloid.write(buf, buf.length); mPhysicaloid.close(); } break; } 

我认为我不需要告诉如何读取接收到的数据,因为所有内容都在库文档中。

主题4:MSP430 LaunchPad板,M430G2553。


该开发板根本不想使用我的硬件。 根本不是由系统决定的,刷新时USB设备信息就会挂起。

结果:


我想要一个用于Tiva C系列主板的库。 在技​​能还不够的情况下重做自己。

Source: https://habr.com/ru/post/zh-CN444110/


All Articles