如何创建可以通过USB OTG电缆与Arduino通信的android应用程序

电子说

1.2w人已加入

描述

步骤1:下载Android Studio

OTG

OTG

OTG

从http://developer.android.com/sdk/index.html获取android studio

单击“下载android studio”按钮开始下载

同意按照条款和条件,您的下载应该开始

文件将是exe文件,文件大小将约为gig

步骤2:安装Android Studio

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

通过一些基本的安装步骤来安装exe文件

最后,它将自动安装最新的SDK版本,使其完成。

最后,您将获得android studio的欢迎屏幕。

第3步:设置在Android Studio中

OTG

OTG

OTG

OTG

OTG

OTG

在在欢迎屏幕上,您应该看到配置按钮,通过选择它,您应该进入配置页面。单击第一个选项将是“ SDK管理器”,方法是单击一个新窗口,其中将显示当前SDK的详细信息。可以选择“启动独立的SDK管理器”,方法是单击将打开良好的旧SDK管理器,然后您可以根据需要添加新的SDK工具。

Android studio有一个用于测试android代码的模拟器,但是很遗憾,我们不能在这种情况下使用它,因为这涉及到物理设备与另一台设备通信。相反,我们可以使用Android手机本身来调试代码。

由于我们使用的是Android设备来调试代码,因此我们只需下载该设备特定版本的“ SDK平台”即可,首先了解android手机的操作系统版本。就我而言,我使用的是具有5.0(棒棒糖)的Samsung note3,因此只需从“ Android 5.0.1(API 21)”下载“ SDK平台”就足够了。

步骤4 :关于库

OTG

我用来进行通信的库称为http://www.physicaloid.com/上的physicaloid,该库最近更新于2年前最终更新无法正常工作(至少对我而言)。因此,在与github存储库中的人讨论之后,我设法获得了该库的旧工作jar文件。

通过使用该库,我们不仅可以与Arduino通信,而且可以将已编译的十六进制文件上传到Arduino,库具有内置的avrdude功能。

步骤5:在Android Studio中创建新项目

OTG

OTG

OTG

OTG

OTG

OTG

OTG

首先,我想制作一个外观与Arduino的串行监视器窗口相同的应用程序。

在android studio的欢迎屏幕上,将有一个创建新项目的选项,选择“开始一个新的android studio项目”

在下一页中输入您的项目名称和位置,然后单击下一步

在下一页中,选择我们正在为其开发应用程序的平台,然后选择正确的手机版本,然后单击下一步。

在下一页中,默认情况下将选择“空白活动”并保持现状。并在下一页上为您的活动(您在应用程序的主屏幕)命名。

然后单击完成,新创建的项目将在android studio中打开,我们现在就可以进行处理

步骤6:将库添加到新项目中

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

OTG

在左上角在主屏幕上,将出现一个下拉菜单,其名称为android,将选项更改为project以查看项目的目录结构。

在目录结构中,通过展开“ app”文件夹,您可以找到lib该文件夹是放置我们的库的默认文件夹。

复制physicaloidlibrary.jar文件并将其粘贴到libs文件夹中

粘贴后,单击顶部的“与gradle文件同步项目”按钮。

现在库已添加,我们可以在代码中使用其功能。

在首次创建项目时自动创建的主要活动将位于

App》 src》 main》 java》 YOUR_ACTIVITY

布局将位于

App》 src》 main》 res》布局》 activity_serial_monitor.xml

步骤7:编辑Manifest.xml

OTG

清单文件类似于我们项目的主要属性文件,其中包含权限详细信息和活动详细信息

清单文件位于App》 src》 main》 AndroidManifest中.xml

打开文件并添加

我的清单文件上方的行看起来像

通过添加该行,我们每次将USB设备连接到OTG端口时都要求用户许可

步骤8:设计布局

OTG

OTG

OTG

OTG

OTG

OTG

编辑应在“ content_serial_monitor.xml”文件中完成

我已拖动3个按钮,1个编辑文本,1个文本视图显示在屏幕上,然后重命名并按正确顺序放置它们。

打开–打开与USB设备的连接

关闭–关闭与USB设备的连接

发送–将数据发送到Arduino

我还添加了一个微调器,以选择串行监视器中可用的波特率和自动滚动功能

将此字符串数组添加到位于应用程序》 src》 main》 res》值》 strings.xml中的strings.xml文件中

Serial Monitor

Settings

Choose Baudrate

300 baud

1200 baud

2400 baud

4800 baud

9600 baud

19200 baud

38400 baud

576600 baud

744880 baud

115200 baud

230400 baud

250000 baud

让我们在应用程序中添加精美的图标

右键单击应用程序》新建》图像资产

现在浏览所需的图像文件并将其设置为ic_launcher,它将覆盖默认的android图标

Step 9:将代码添加到UI元素

OTG

我附加了完整的Java文件Serial_monitor.java,首先下载了该文件并将其与这些小代码段进行比较。

首先我们创建所有UI元素和库变量

Button btOpen, btClose, btWrite;

EditText etWrite;

TextView tvRead;

Spinner spBaud;

CheckBox cbAutoscroll;

Physicaloid mPhysicaloid; // initialising library

下一步,在onCreate方法中,我们可以初始化我们创建的那些变量

btOpen = (Button) findViewById(R.id.btOpen);

btClose = (Button) findViewById(R.id.btClose);

btWrite = (Button) findViewById(R.id.btWrite);

etWrite = (EditText) findViewById(R.id.etWrite);

tvRead = (TextView) findViewById(R.id.tvRead);

spBaud = (Spinner) findViewById(R.id.spBaud);

cbAutoscroll = (CheckBox)findViewById(R.id.autoscroll);

mPhysicaloid = new Physicaloid(this); // setting the context for library

现在我们可以显示屏幕上必需的UI元素,我正在调用一个方法来实现此目的

该方法采用布尔参数,该参数指定天气应用是否已连接到Arduino

setEnabledUi(false);//未连接到Arduino,所以为假

//setEnabledUi method to set UI elements on screen

private void setEnabledUi(boolean on) {

if(on) { // if connected to device

btOpen.setEnabled(false); //hide open button (already opened)

spBaud.setEnabled(false); //hide baudrate selector

cbAutoscroll.setEnabled(false); // hide autoscroll

btClose.setEnabled(true); // display close button

btWrite.setEnabled(true); // display send button

etWrite.setEnabled(true); // display edittext field

} else { // if not connected to device

btOpen.setEnabled(true); //display open button

spBaud.setEnabled(true); //display baudrate selector

cbAutoscroll.setEnabled(true); //display autoscroll

btClose.setEnabled(false); // hide close button (already closed)

btWrite.setEnabled(false); // hide send button

etWrite.setEnabled(false); // hide edittext field

}

}

现在我们根据需要显示了所有内容,现在我们可以向按钮添加操作。

打开按钮的侦听器方法,在此方法涵盖了波特率设置,自动滚动选项以及与设备的连接。

public void onClickOpen(View v) {

// setting the baudrate based on spinner

String baudtext = spBaud.getSelectedItem().toString(); // get the text from spinner

//switch statement to check for baud rate

switch (baudtext) {

case “300 baud”:

mPhysicaloid.setBaudrate(300);

break;

case “1200 baud”:

mPhysicaloid.setBaudrate(1200);

break;

case “2400 baud”:

mPhysicaloid.setBaudrate(2400);

break;

case “4800 baud”:

mPhysicaloid.setBaudrate(4800);

break;

case “9600 baud”:

mPhysicaloid.setBaudrate(9600);

break;

case “19200 baud”:

mPhysicaloid.setBaudrate(19200);

break;

case “38400 baud”:

mPhysicaloid.setBaudrate(38400);

break;

case “576600 baud”:

mPhysicaloid.setBaudrate(576600);

break;

case “744880 baud”:

mPhysicaloid.setBaudrate(744880);

break;

case “115200 baud”:

mPhysicaloid.setBaudrate(115200);

break;

case “230400 baud”:

mPhysicaloid.setBaudrate(230400);

break;

case “250000 baud”:

mPhysicaloid.setBaudrate(250000);

break;

default: // default is 9600

mPhysicaloid.setBaudrate(9600);

}

if(mPhysicaloid.open()) { // tries to connect to device and if device was connected

setEnabledUi(true);

if(cbAutoscroll.isChecked()) { // if auto scroll was selected

tvRead.setMovementMethod(new ScrollingMovementMethod());

}

// read listener, When new data is received from Arduino add it to Text view

mPhysicaloid.addReadListener(new ReadLisener() {

@Override

public void onRead(int size) {

byte[] buf = new byte[size];

mPhysicaloid.read(buf, size);

tvAppend(tvRead, Html.fromHtml(“” + new String(buf) + “”)); // add data to text viiew

}

});

} else {

//Error while connecting

Toast.makeText(this, “Cannot open”, Toast.LENGTH_LONG).show();

}

}

tvAppend方法将接收到的数据写入Textview

Handler mHandler = new Handler();

private void tvAppend(TextView tv, CharSequence text) {

final TextView ftv = tv;

final CharSequence ftext = text;

mHandler.post(new Runnable() {

@Override

public void run() {

ftv.append(ftext); // add text to Text view

}

});

}

用于关闭按钮的监听器

public void onClickClose(View v) { //when close button is pressed

if(mPhysicaloid.close()) { //close the connection to arduino

mPhysicaloid.clearReadListener(); //clear read listener

setEnabledUi(false); // set UI accordingly

}

}

发送按钮的监听器

public void onClickWrite(View v) { // when send button is prressed

String str = etWrite.getText().toString()+“ ”; //get text from EditText

if(str.length()》0) {

byte[] buf = str.getBytes(); //convert string to byte array

mPhysicaloid.write(buf, buf.length); //write data to arduino

}

}

这一切都已完成,只需连接手机并运行应安装并打开的程序即可。

第10步:测试应用程序

OTG

OTG

OTG

现在连接手机并通过以下方式运行代码使用顶部的“播放”按钮,现在会弹出设备选择器对话框,并询问该应用程序应安装在哪个设备上。

注意:如果您在列表中找不到手机,请尝试重新安装手机驱动程序。

p》

如果选择正确,则应用程序应自动安装在手机上,并对UI进行必要的调整。

运行一些测试代码并上传到arduino

void setup()

{

// Open serial communications and wait for port to open:

// Serial.begin(1200);

// Serial.begin(2400);

// Serial.begin(4800);

Serial.begin(9600);

// Serial.begin(14400);

// Serial.begin(19200);

// Serial.begin(38400);

// Serial.begin(57600);

// Serial.begin(115200);

}

void loop()

{

while(Serial.available() 》 0) {

Serial.write(Serial.read());

}

}

断开手机与PC的连接,并使用OTG电缆连接到Arduino,并发送一些应返回的数据

步骤11:其他用途

OTG

您可以修改布局和代码以适合您的需要,并为分别制造的每台设备制作一个应用程序

例如,我修改了相同的项目以用作我的电动机计时器控制器的接口。

责任编辑:wv
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分