求助如何在基于安卓通过WiFi与Arduino通信,实现对LED灯的控制。

2024-11-27 22:56:29
推荐回答(4个)
回答1:

项目需要的硬件如下:

Arduino Uno
Ethernet Shield
LED灯 2个.
电阻 2个.
面包板(可选)
连接导线
路由器一个
项目要的连接管脚如下:
LED 1 --> pin 6 to ground
LED 2 --> pin 7 to ground
项目需要的软件如下:
Eclipse IDE
Arduino IDE 1.x.x
LED 1 --> pin 6 to ground
LED 2 --> pin 7 to ground

项目需要的软件如下:

Eclipse IDE
Arduino IDE 1.x.x

Step 1: 在 Arduino上编程如下:#include "etherShield.h"
#include "ETHER_28J60.h"

int led2 = 7;
int led1 = 6;

static uint8_t mac[6] = {0xAA, 0xBB, 0xCC, 0xDD, 0xBB, 0xAA}; // this just needs to be unique for your network,
// so unless you have more than one of these boards
// connected, you should be fine with this value.

static uint8_t ip[4] = {192, 168, 0, 15}; // the IP address for your board. Check your home hub
// to find an IP address not in use and pick that
// this or 10.0.0.15 are likely formats for an address
// that will work.
static uint16_t port = 80; // Use port 80 - the standard for HTTP

ETHER_28J60 e;

void setup()
{
e.setup(mac, ip, port);

pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);

digitalWrite(led1, LOW);
digitalWrite(led2, LOW);

}

void loop()
{
char* params;
if (params = e.serviceRequest())
{
if (strcmp(params, "?cmd=1") == 0)
{
digitalWrite(led1, HIGH);
}
if (strcmp(params, "?cmd=2") == 0)
{
digitalWrite(led1, LOW);

}
if (strcmp(params, "?cmd=3") == 0)
{
digitalWrite(led2, HIGH);
}
if (strcmp(params, "?cmd=4") == 0)
{
digitalWrite(led2, LOW);

}

e.respond();
}
}
Step 2: 制作安卓APP

package com.androidarduino;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

@Override
protected void onCreate(Bundle savedInstanceState) {

StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

View led1on = findViewById(R.id.led_1on);
View led1off = findViewById(R.id.led_1off);
View led2on = findViewById(R.id.led_2on);
View led2off = findViewById(R.id.led_2off);

led1on.setOnClickListener(this);
led1off.setOnClickListener(this);
led2on.setOnClickListener(this);
led2off.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public void commandArduino(String url){
try {
HttpClient httpclient = new DefaultHttpClient();
httpclient.execute(new HttpGet(url));
} catch (Exception e) {
}
}

public void onClick(View thisView) {
switch(thisView.getId()){
case R.id.led_1on:
commandArduino("http://192.168.0.15/?cmd=1");
Toast.makeText(getApplicationContext(), "led_1on",Toast.LENGTH_LONG).show();
break;
case R.id.led_1off:
commandArduino("http://192.168.0.15/?cmd=2");
Toast.makeText(getApplicationContext(), "led_1off",Toast.LENGTH_LONG).show();
break;
case R.id.led_2on:
commandArduino("http://192.168.0.15/?cmd=3");
Toast.makeText(getApplicationContext(), "led_2on",Toast.LENGTH_LONG).show();
break;
case R.id.led_2off:
commandArduino("http://192.168.0.15/?cmd=4");
Toast.makeText(getApplicationContext(), "led_2off",Toast.LENGTH_LONG).show();
break;

}

}

}

回答2:

不难,就是步骤有点多,可以看看“老罗的Android之旅”,从底层驱动,HAL,framework,app,一层层自己加东西调用

回答3:

应该可以通过某些软件来实现 我的Iphone前几天在APP里下载了一个叫几维遥控器的东西 现在我开空调 电视换台 啥的都不需要找遥控器了,直接用手机就能解决了 其实这类的东西都有很多 应该能找到

回答4:

应该可以通过某些软件来实现 我的Iphone前几天在APP里下载了一个叫几维遥控器的东西 现在我开空调 电视换台 啥的都不需要找遥控器了,直接用手机就能解决了 其实这类的东西都有很多 应该能找到