STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(二)---上位机搭建
事物的难度远远低于对事物的恐惧
完成对STM32单片机和ESP8266 WiFi模块的配置之后,接下来需要完成Android APP代码的编写以及实现。
1.添加网络权限
因为我们需要对WiFi进行操作,所以需要网络的权限,在AndroiManifest.xml文件中加入以下代码:
<uses-permission android:name="android.permission.INTERNET" />
2.建立TCP连接
首先通过文本输入控件得到IP地址和端口号,然后建立Socket连接。
case R.id.btn_turn:if (mSocket == null || !mSocket.isConnected()) {if(!TextUtils.isEmpty(mText_ip.getText()) && !TextUtils.isEmpty(mText_port.getText())){mip = mText_ip.getText().toString();mport = Integer.parseInt(mText_port.getText().toString());Log.i(TAG, "onClick: "+mport);mConnectThread = new ConnectThread(mip, mport);mConnectThread.start();}else if(TextUtils.isEmpty(mText_ip.getText())){Toast.makeText(this,"请输入IP地址",Toast.LENGTH_SHORT).show();}else if(TextUtils.isEmpty(mText_port.getText())){Toast.makeText(this,"请输入端口号",Toast.LENGTH_SHORT).show();}}if (mSocket != null && mSocket.isConnected()) {try {mSocket.close();mSocket = null;mBtn_turn.setText("连接");Toast.makeText(this, "连接已断开", Toast.LENGTH_SHORT).show();} catch (IOException e) {e.printStackTrace();}}break;
上述代码是通过按钮点击事件获得到IP地址和端口号,然后通过创建一个ConnectThread类对象并调用里面的run()方法实现TCP连接。该类的代码如下:
private class ConnectThread extends Thread {private String ip;private int port;public ConnectThread(String ip, int port) {this.ip = ip;this.port = port;}@Overridepublic void run() {try {mSocket = new Socket(ip, port);out = new PrintStream(mSocket.getOutputStream());mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));runOnUiThread(new Runnable() {@Overridepublic void run() {mBtn_turn.setText("断开");Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show();}});} catch (IOException e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();}});}}}
在run()方法中不仅建立了连接,而且还获得了该连接的输出流对象 out (用于APP向单片机发送数据)和输入流对象 mBufferedReader (用于APP接收单片机发来的数据)。
3.APP发送数据
在上文中得到了输出流对象 out,利用它的print()和flush()方法完成数据的发送,代码如下:
case R.id.btn_send:final String str = mSend_text.getText().toString();if (str != null && out != null) {new Thread(new Runnable() {@Overridepublic void run() {out.print(str);out.flush();}}).start();}break;
4.APP接收数据
在这里本文使用了定时器,设置每隔一段时间就去判断数据输入流对象mBufferedReader的方法ready(),从而得知是否有数据到来了,如果有就存入到一个全局变量中,然后通过Handler对象发送消息,进而实现在UI线程中更新TextView控件,代码如下:
private class ReceiveDataTask extends TimerTask {@Overridepublic void run() {try {if (mBufferedReader != null && (mBufferedReader.ready())) {char[] readbuff = new char[30];byte[] readByte = new byte[30];mBufferedReader.read(readbuff, 0, readbuff.length);tempStrng = String.valueOf(readbuff);readByte = tempStrng.getBytes();readStrng = new String(readByte, 0, readByte.length, "GB2312");Message message = Message.obtain();message.what = 1212;mHandler.sendMessage(message);}} catch (IOException e) {e.printStackTrace();}}}private void startTimer() {Log.i(TAG, "startTimer:");if (mTimer == null) {mTimer = new Timer();}if (mReceiveDataTask == null) {mReceiveDataTask = new ReceiveDataTask();}mTimer.schedule(mReceiveDataTask, 0, 10);}private void stopTimer() {Log.i(TAG, "stopTimer: ");if (mReceiveDataTask != null) {mReceiveDataTask.cancel();mReceiveDataTask = null;}if (mTimer != null) {mTimer.cancel();mTimer = null;}}
消息处理代码如下:
private class myHandler extends Handler {@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what) {case 1212:mSend_text_dis.setText(readStrng);break;}}}
开启定时器和关闭定时器代码如下:
@Overrideprotected void onStart() {super.onStart();startTimer();}@Overrideprotected void onStop() {super.onStop();stopTimer();}
现在就可以实现了数据的互相传输。
STM32单片机和Android APP源代码免费获取方式:
下位机硬件配置可以参考这个文章:
STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(一)—下位机硬件配置
STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(二)---上位机搭建相关推荐
- 基于STM32F1单片机、ESP8266WIFI模块、DHT11温湿度传感的WIFI网络温湿度传输系统
基于STM32F1单片机.ESP8266WIFI模块.DHT11温湿度传感的WIFI网络温湿度传输系统 功能说明 温湿度采集端 温湿度监控端 硬件材料 硬件连接 主要代码 温湿度采集端 温湿度监控端 ...
- STM32单片机与蓝牙模块HC-05通信数据帧处理
本章将会详细讲述蓝牙模块(HC-05)和STM32单片机之间的通信收发的数据如何处理,在测试开始前首先在手机上下载好一个蓝牙调试APP,此APP可以是手机端和PC端口的,以我常用的手机端的为例. 在配 ...
- STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)
STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float) 最近在做毕业设计,在做wifi数据传输与接收时,涉及到了STM32 ...
- Android APP压力测试(二) 之Monkey信息自动收集脚本
转载-原文地址: http://www.cnblogs.com/findyou/p/3936063.html Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 本文重点 ...
- PIC单片机的AD数据传输和上位机C#串口界面实时显示
PIC单片机的AD数据传输和上位机C#窗口界面实时显示 硬件:BK300开发板+PIC16F877A芯片+Pickit2 软件:MPLAB IDE v8.91.Visual Studio 2019 下 ...
- stm32 温湿度_基于STM32单片机大棚温湿度检测无线蓝牙APP控制设计
本设计由STM32单片机+风扇控制电路+温湿度传感器电路+1602液晶显示电路+蓝牙模块电路+电源电路组成. 通过温湿度传感器检测温湿度,并在液晶上和APP上实时显示. 当湿度超过75度,APP发出报 ...
- 基于STM32单片机与wifi模块串口结合进行PC端或手机端无线通信(附项目资料包)
项目所需材料: stm32f103系列最小系统开发板一块. WiFi模块. 具有WiFi功能的手机及PC机. 达普电池一包(或者学生电源一台).. 1k电阻4个,杜邦线若干. 一.硬件环境搭建 1.1 ...
- 单片机HC06蓝牙模块与手机APP
学习HC06蓝牙模块遇到一些问题,特此写下作为记录. 用USB转TTL连接,插到电脑上,发AT怎么也不回 USB转TTL与蓝牙模块连接图 打开串口助手: 一开始用的是丁丁串口助手,发·AT不回OK. ...
- STM32单片机+LD3320语音识别模块+MP3模块或者nsy8266语音合成模块制作的语音插座
自己利用空闲时间,用32单片机和一些模块做了一个语音插座,既有12V直流电输出,也有两路220交流输出(其中一路可以支持高低档切换,实现原理就是在两个继电器中间串一个1N5408二极管).本制作语音插 ...
最新文章
- class反编译成java_Spring Tools Suite(STS)安装反编译插件
- 主板支持最大内存查看软件
- C语言条件编译及编译预处理阶段
- Python 面向监狱编程,就靠它了
- 【Linux系统编程】进程间通信之命名管道
- SpringMVC的请求-获得请求参数-获得POJO类型参数
- 【报告分享】2021上半年短视频及电商生态研究报告.pdf(附下载链接)
- C++ multimap 用法总结 例子
- BZOJ3156 防御准备
- 计算机cad名词解释,CAD全部名词解释
- KYLO的JVM知识总结
- 如何填写台式计算机参数,教你如何看懂电脑各配置参数
- vmware下ubuntu从图形界面切换到控制台的快捷键
- 【COCI 2011】送票
- 改进杂草算法求解WSN节点分布优化问题
- 学习高博SLAM(1)
- GitHub重磅官宣!我总结了所有面试题,快来收藏!
- Buffer Overflow Vulnerability Prediction from x86 executables using Static Analysis and ML
- 有限体积法(10)——格式精度与待定系数法
- 洛阳理工JAVA期末考试_洛阳理工学院2010/2011学年第一学期基础体育理论期末考试试题答案...
热门文章
- 2021年中国互联网企业100强出炉(附全名单)
- RS笔记:传统推荐模型之FFM (引入特征域的概念) [2015 Criteo]
- 微信二次开发sdk非ipad/android协议(很好用)
- Java~大厂面试八股文~强烈推荐视频
- 第十三届蓝桥杯C++B组国赛D题——最大数字(AC)
- 柠檬班接口测试Tomcat+MySQL测试环境搭建
- 重定向时,将Unreal4骨骼调整为Tpose
- 解决Android Studio等开发软件出现更新TKK失败的两种方案
- Beyond Compare实现Class文件对比
- 百度网盘怎么批量改名(包含子文件夹)