0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Android应用程序控制arduino IO引脚

454398 来源:网络整理 作者:佚名 2019-11-06 17:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:部件

对于这个instructables你需要几个部分。

一个arduino

一个Android智能手机或平板电脑(我正在使用android 5.0.1)

以太网屏蔽

3 Led

3 220欧姆电阻

一些跳线

a breadboard

安装了android studio的计算机

步骤2:以太网盾

我从gearbest.com获得了这个以太网屏蔽。

它立即在我的arduino mega(也来自gearbest.com)上工作

在屏蔽上你有2个SPI设备。 SD卡读卡器和用于以太网的W5100 IC。

在这个instructables中,我们只使用以太网部件。

步骤3:架构

我们需要将3个led连接到arduino。您可以使用除引脚0,1,10到13和50到53之外的每个引脚。

我使用的是引脚22,引脚23和引脚24.

您还需要将arduino连接到你的本地网络。不需要互联网。

第4步:Arduino草图

对于arduino草图,我从示例网络服务器草图开始。

我尝试记录每一件事,但如果你有问题可以随意提问!

#include

#include

// Set the MAC address

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

// Set the IP address

IPAddress ip(192, 168, 1, 177);

// Start a server at port 80 (http)

EthernetServer server(80);

void setup() {

// Open serial communications

Serial.begin(9600);

// start the Ethernet connection and the server

Ethernet.begin(mac, ip);

server.begin();

// Pin 22 - 24 output (leds)

pinMode(22, OUTPUT);

pinMode(23, OUTPUT);

pinMode(24, OUTPUT);

}

void loop() {

// Check if client connected

EthernetClient client = server.available();

if (client) { // If there is a client.。.

boolean currentLineIsBlank = true;

String buffer = “”; // A buffer for the GET request

while (client.connected()) {

if (client.available()) {

char c = client.read();// Read the data of the client

buffer += c; // Store the data in a buffer

if (c == ‘ ’ && currentLineIsBlank) {// if 2x new line ==》 Request ended

// send a standard http response header

client.println(“HTTP/1.1 200 OK”);

client.println(“Content-Type: text/html”);

client.println(“Connection: close”);

client.println(); // Blank line ==》 end response

break;

}

if (c == ‘ ’) { // if New line

currentLineIsBlank = true;

buffer = “”; // Clear buffer

} else if (c == ‘ ’) { // If cariage return.。.

//Read in the buffer if there was send “GET /?。..”

if(buffer.indexOf(“GET /?led1=1”)》=0) { // If led1 = 1

digitalWrite(24, HIGH); // led 1 》 on

}

if(buffer.indexOf(“GET /?led1=0”)》=0) { // If led1 = 0

digitalWrite(24, LOW); // led 1 》 off

}

if(buffer.indexOf(“GET /?led2=1”)》=0) { // If led2 = 1

digitalWrite(22, HIGH); // led 2 》 on

}

if(buffer.indexOf(“GET /?led2=0”)》=0) { // If led2 = 0

digitalWrite(22, LOW); // led 2 》 off

}

if(buffer.indexOf(“GET /?led3=1”)》=0) { // If led3 = 1

digitalWrite(23, HIGH); // led 3 》 on

}

if(buffer.indexOf(“GET /?led3=0”)》=0) { // If led3 = 0

digitalWrite(23, LOW); // led 3 》 off

}

} else {

currentLineIsBlank = false;

}

}

}

delay(1);

client.stop();

}

}

那是arduino上的代码。

很简单,对吧?让我们去看看应用程序吧!

第5步:应用程序布局

为了创建一个android工作室项目我会在这里重定向你。开头是相同的,选择一个名称并创建主要活动,但在删除“hello world” textview后,您需要添加任意类型的3个按钮。我正在使用开关,切换按钮和普通按钮,但您可以选择最喜欢的。

注意:

如果出现渲染错误,请在窗口顶部将 Apptheme 更改为 Appcompat.NoActionBar

!注意!

正常按钮只会在按下时点亮它的LED。释放按钮后led将熄灭。

在 res/values/styles.xml 中,您需要将父级更改为:“Theme.Appcompat.NoActionBar”

好的,现在我们可以开始编写应用程序了!

第6步:应用程序编码

为了对应用进行编码,我让您更轻松。您需要将此代码复制到 MainActivity.java ,并将包 laurens_wuyts.arduinoiocontrol 更改为 company.appname 。

package laurens_wuyts.arduinoiocontrol;

import android.app.Activity;

import android.os.AsyncTask;

import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.widget.Button;

import android.widget.CompoundButton;

import android.widget.Switch;

import android.widget.ToggleButton;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

public class MainActivity extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

//noinspection SimplifiableIfStatement

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

/*****************************************************/

/* This is a background process for connecting */

/* to the arduino server and sending */

/* the GET request withe the added data */

/*****************************************************/

private class Background_get extends AsyncTask {

@Override

protected String doInBackground(String.。. params) {

try {

/*********************************************************/

/* Change the IP to the IP you set in the arduino sketch */

/*********************************************************/

URL url = new URL(“http://192.168.1.177/?” + params[0]);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

StringBuilder result = new StringBuilder();

String inputLine;

while ((inputLine = in.readLine()) != null)

result.append(inputLine).append(“ ”);

in.close();

connection.disconnect();

return result.toString();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

}

在此代码中,您只需要将IP更改为arduino的IP。

要检查按钮,您需要做两件事:

定义按钮

为每个按钮添加onclick/onchange监听器。

定义按钮:

/* For a switch */

Switch led1 = (Switch) findViewById(R.id.Led1);

/* For a toggle button */

ToggleButton led2 = (ToggleButton) findViewById(R.id.Led2);

/* For a normal button */

Button led3 = (Button) findViewById(R.id.Led3);

添加onclick/onchange:

将onclick/onchange侦听器放在onCreate函数中。

/* For a switch you‘ll need an “OnCheckedChangeListener” like this */

led1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if (isChecked) {

/* Switch is led 1 */

new Background_get().execute(“led1=1”);

} else {

new Background_get().execute(“led1=0”);

}

}

});

/* For a toggle button you also need a “OnCheckedChangeListener” */

led2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if(isChecked) {

/* Toggle button is led 2 */

new Background_get().execute(“led2=1”);

} else {

new Background_get().execute(“led2=0”);

}

}

});

/* For a button you’ll need a “OnTouchListener” */

led3.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

/* button is led 3 */

new Background_get().execute(“led3=1”);

} else if (event.getAction() == MotionEvent.ACTION_UP) {

new Background_get().execute(“led3=0”);

}

return true;

}

});

这就是所有编码这需要做!现在我们需要为您的应用添加权限。

步骤7:向您的应用添加权限

让您的应用运行你需要赋予它权限。我们只需要1个权限:上网。要获得此权限,您需要打开清单文件并添加:

步骤8:恢复

在这个教程中,我向您展示了如何通过网络从Android手机控制arduino IO引脚。

我还为想要使用它的人提供了完整的应用程序目录。

责任编辑:wv

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

    关注

    12

    文章

    4035

    浏览量

    134480
  • Arduino
    +关注

    关注

    190

    文章

    6527

    浏览量

    197448
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TMS320F28xxx DSP:从内部闪存运行应用程序的全面指南

    应用程序所需的特殊要求、软件修改以及性能优化技巧。 文件下载: TMDSC2KWRKSHPKIT.pdf 1. 引言 TMS320F28xxx DSP系列专为嵌入式控制器应用的独立运行而设计。片上闪存通常
    的头像 发表于 04-23 13:40 92次阅读

    S32K系列引导加载程序应用程序跨不同定制电路板设计的跳转问题求解

    应用程序和固件升级 - 板 2:相同的引导加载程序项目失败 - 无法跳转到用户应用程序 **董事会之间的主要区别:** - UART 通信引脚分配 - I2C 通信
    发表于 04-22 07:02

    S32K3跳转到应用程序后,PTD5上没有活动,为什么?

    我正在编写一个在微S32K324上加载的引导加载程序。 为了解决这个问题,我编写了一个非常简单的引导加载程序应用程序。 引导加载程序缓慢切换 PDT5
    发表于 04-16 08:59

    如何构建蓝牙应用程序

    应用程序使用蓝牙(blueZ)。 我已经安装了 gcc-riscv64-linux-gnu。 但是,没有安装 blueZ 标头和库。 如何构建我的蓝牙应用程序
    发表于 04-01 07:31

    USBISP/USBasp编程器给Atmega32U4下载Arduino bootloader引导程序

    对于新出厂的ATmega32U4芯片内部是没有arduino引导程序的,需要用户预先下载bootloader后才能用串口下载自己的应用程序.在某些罕见情况下旧的bootloader会导致一些bug
    的头像 发表于 01-31 14:38 919次阅读
    USBISP/USBasp编程器给Atmega32U4下载<b class='flag-5'>Arduino</b> bootloader引导<b class='flag-5'>程序</b>

    将JTAG引脚用作普通IO

    将JTAG引脚用作普通IO时,需要通过复用功能重映射来释放调试接口占用的引脚资源。 void JTAG_To_GPIO_Config(void) { // 关闭JTAG功能(保留SWD调试接口
    发表于 11-13 06:39

    学生适合使用的SOLIDWORKS 云应用程序

    随着科技的不断发展,计算机辅助设计(CAD)技术已经成为现代工程教育的重要组成部分。SOLIDWORKS作为一款CAD软件,其教育版云应用程序为学生提供了强大而灵活的设计平台。本文将探讨
    的头像 发表于 09-15 10:39 940次阅读
    学生适合使用的SOLIDWORKS 云<b class='flag-5'>应用程序</b>

    S7-200 可编程序控制器系统手册

    电子发烧友网站提供《S7-200 可编程序控制器系统手册.pdf》资料免费下载
    发表于 09-02 16:24 5次下载

    当ICE_DAT引脚和ICE_CLK引脚应用程序代码中配置为备用功能时,是否会导致编程失败?

    当ICE_DAT引脚和ICE_CLK引脚应用程序代码中配置为备用功能时,是否会导致编程失败?
    发表于 08-25 06:55

    如何用Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder

    本文介绍了如何用能够Arduino IDE下载的Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录
    的头像 发表于 08-08 20:16 3949次阅读
    如何用<b class='flag-5'>Arduino</b> Nano/UNO R3开发板给另一个<b class='flag-5'>Arduino</b> IDE不能下载的<b class='flag-5'>Arduino</b> Nano/UNO R3开发板重新烧录引导<b class='flag-5'>程序</b>bootlaoder

    CY8C4128LQI-BL543无法扫描PC和Android手机,为什么?

    。 为什么?(PC和Android手机 CAN 广告和s同时CAN )。 我使用的是 Psoc 4 ble 4.2 版本的设备和 Psoc creator 4.4 版本。 扫描 PC 和 Android 手机需要配置或应用程序
    发表于 07-07 08:09

    无法将应用程序下载到串行闪存怎么解决?

    我尝试在蓝牙模块CYBT-343026-01(CYW20706)上下载应用程序到串行闪存,但失败了。 第一步是按照 AIROC™ HCI UART 控制协议文档(见下文)的指示向模块发送
    发表于 07-04 06:49

    对于具有直接反馈控制的 CCG3PA 应用程序,是否可以正确地重新使用引脚 12(负载使能控制),它有哪些限制?

    对于具有直接反馈控制的 CCG3PA 应用程序,是否可以正确地重新使用引脚 12(负载使能控制),它有哪些限制? 我们能够将其重复用于通信,但是当使用 \"
    发表于 05-26 07:23

    《ESP32S3 Arduino开发指南》第二章 Arduino基础知识

    ,目前最新的Arduino核心库采用C与C++混合编程。通常所说的Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(Applocation Programmi
    发表于 05-13 09:28

    是否有办法用标准Windows驱动程序控制GPIO吗?

    问题。 CY7C65213-28PVXI 的 GPIO 控制使用“cyusbserial.dll”执行 由CYPRESS™提供, 但我发现该 dll 不能与标准 Windows 驱动程序一起使用。 您能告诉我是否有办法用标准 Windows 驱动
    发表于 05-08 07:05