我尝试用WiFi替换蓝牙连接。我的原始项目有一个PIC微控制器,它是数据记录时间,日期和临时值,以及控制一些输出。很久以前我写了一个应用程序(3年,从那时起就完成了!),它使用蓝牙从Android向PIC发送和接收数据,工作正常。 到目前为止,我已经将ESP8266连接到Pic微控制器,ESP正在使用ESP-LINK固件并连接到我的家庭网络。 pic将从ESP8266收到的内容中继到RealTerm,以便我可以监控。我创建了一个测试应用程序,它创建一个套接字并向PIC发送一个字节,工作正常,字节正在接收,代码如下。
package com.example.carl.sockets;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class MainActivity extends AppCompatActivity {
private Socket socket;
private static final int SERVERPORT = 23;
private static final String SERVER_IP = "00.00.00.00"; // enter IP of ESP8266 here
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new ClientThread()).start();
}
public void onClick(View view) {
try {
EditText et = (EditText) findViewById(R.id.EditText01);
Integer i = Integer.parseInt(et.getText().toString());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
if(i > 0 && i < 255){
out.write(i);
}else{
Toast.makeText(this,"Number out of Range !",Toast.LENGTH_SHORT).show();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
class ClientThread implements Runnable {
@Override
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVERPORT);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
一旦将字节发送到PIC,它将发送字节或字节作为响应。我现在需要读取PIC返回的字节或字节,并在TextView中显示它们。我将知道PIC将发送多少字节并由应用程序提前收到。
我看过大量的代码,但似乎都是针对不同的服务器和客户端,我不希望这样(或者我)并且不能想出这个。
之前可能已经提出这个问题,但我已经花了很多时间寻找,并且非常感谢任何帮助或建议。
答案 0 :(得分:0)
我现在有了这个工作,可以发送一个字节,从我的PIC通过WiFi接收一个字节或字节到我的Android应用程序。 我创建了一个新线程来等待输入流上的数据。我的主要问题是在启动此线程之前确保套接字已连接,一旦我确认它已正常工作。 收到数据后,它会通过处理程序发回主代码。我的处理程序根据收到的内容输出文本到我的应用程序,七个字节是临时读数和时间和日期。只显示单个字节。 我的代码是附加的,可能不是很漂亮!!任何建设性的批评都会受到欢迎。
def list(self, request):
#get_queryset is also overridden to accept filters in query_params
queryset = self.get_queryset()
if not queryset.exists():
return Response(status=status.HTTP_204_NO_CONTENT)
return super(ProductViewSet, self).list(request)
我认为现在唯一的问题是内存泄漏? 我收到了一条消息 - 07-30 17:46:01.154 15417-15445 / com.example.carl.sockets D / dalvikvm:GC_FOR_ALLOC释放512K,22%免费9692K / 12332K,暂停18ms,总计18ms
应用程序启动后,显示器显示我使用的是9.4 MB。
答案 1 :(得分:0)
我对泄漏进行了排序,我正在使用ggplot2
来测试数据是否因某种原因存在。真的不明白!摆脱了receiveData中的两个library(tidyverse)
library(ggstance)
mtcars %>%
group_by(cyl, am) %>%
summarize(lo = mpg %>% min,
hi = mpg %>% max) %>%
ggplot() +
geom_linerangeh(aes(y = am %>%
factor,
xmin = lo,
xmax = hi,
group = am %>%
factor),
position = position_dodgev(height = .25)) +
facet_wrap(~cyl, ncol = 1)
语句,现在效果很好。