9-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给AndroidTCP客户端显示)
http://www.cnblogs.com/yangfengwu/p/8798512.html
补充:今天答应了一个朋友写一下如果单片机发过的是字符串应该怎么解析,答应了今天写,哦哦哦是明天了,闲话少说,赶紧写
列如 DATA;T=25;H=33
len = inputStream.read(buf);//服务器断开会返回-1
byte[] ReadBuffer0 = new byte[len];//存储接收到的数据
for (int i = ; i < len; i++)
{
ReadBuffer0[i] = buf[i];
} 要想处理字符串的当然要把数据变为字符串 String DataString = new String(ReadBuffer0) String temp[] = DataString.split(";");
现在 temp[] = "DATA"
temp[] = "T=25"
temp[] = "H=33" 要想再分离
String temp1[] = temp[]..split("=");
数据就出来了temp1[] =""
有人会说这还是字符串哈...
记住高级语言几乎提供了所有可能用到的方法
不知道用哪个方法,但是你要知道你要干什么
我就是想
十进制字符串 转 10进制数
那就百度

有人会问,明明是android,为什么搜索的时候写的java.......................................
android开发用的语言就是java,,,,,,一般方法类的问题我都是搜java 界面相关类的问题我都是搜android

所以
int t = Integer.valueOf(temp1[], );
如果不对,怎么办 再百度去
说一下,问自己问题的人一直很多,我更多的是告诉方法,而不直接告诉结论,因为怕把自己身边的人惯坏了,有什么问题直接问我,然后我分分钟解决了,没什么意义,真正思考的是我而不是你了,这样的话,学习能力很难得到提升.很多人佩服自己的学习能力,和实际解决问题的能力,是因为自己走的弯路比较多,沉淀的比较多,你必须对你所做的工作充满热爱,它才会让你走的更远....
先把源码和资料链接放到这里
链接: https://pan.baidu.com/s/1jpHZjW_7pQKNfN9G4B6ZjA 密码:nhn3
先说一下那天的bug
所有的任务在启动时都是新建

否则就会有问题
但是每次新建可能会产生有好几个同样的任务

列如上面的连接任务
咱们用一个全局的变量去记录咱的连接任务

销毁的时候

try {
mthreadConnectService.interrupt();
} catch (Exception e) {
}
发送数据的任务也是用一个全局变亮记录

出现问题需要销毁的时候

因为有好几个地方要添加这几句话,本来想.....算了,后期再说
现在做显示部分,先给自己说一下,,,,下一篇一定要用Handle,如果还是这样写..都感觉无人子弟....唉......写的有点害怕了,,,,应该先介绍
通常怎么操作控件的....这样操作控件懂行的人不知道会不会....唉
现在界面再拖一个TextView用来显示温湿度数据


再看一下规定的

然后其实就是在接收数据里面

/**
* 接收数据的任务
* @author yang
*
*/
class ThreadReadData extends Thread
{
public void run()
{
while (threadReadDataFlage)
{
try
{
ReadBufferLengh = inputStream.read(ReadBuffer);//服务器断开会返回-1
if (ReadBufferLengh == -)
{
threadSendDataFlage = false;//关掉发送任务,预防产生多的任务
threadReadDataFlage = false;//关掉接收任务,预防产生多的任务
try {mthreadReadData.interrupt();} catch (Exception e) {}
try {mthreadSendData.interrupt();} catch (Exception e) {}
SendDataCnt = ;//清零发送的个数
ConnectFlage = true; buttonConnect.post(new Runnable() {
@Override
public void run() {
buttonConnect.setText("连接");
Toast.makeText(getApplicationContext(), "与服务器断开连接", ).show();
}
});
} try //防止数据有其它错误
{
if ((ReadBuffer[]&0xff) == 0xaa && (ReadBuffer[]&0xff) == 0x55)
{
if ((ReadBuffer[]&0xff) == 0x01) {
textViewShowData.post(new Runnable() {//稍微写一个靠谱点的操作UI控件
public void run() {
textViewShowData.setText("温度:"+(ReadBuffer[]&0xff)+"湿度"+(ReadBuffer[]&0xff));
}
});
}
}
} catch (Exception e) {
// TODO: handle exception
} }
catch (Exception e)
{
// TODO Auto-generated catch block
Log.e("error", ReadBufferLengh+"");
e.printStackTrace();
runOnUiThread(new Runnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用
public void run() {
buttonConnect.setText("连接");
Toast.makeText(getApplicationContext(), "与服务器断开连接", ).show();
}
});
ConnectFlage = true;
threadSendDataFlage = false;//关掉发送任务,预防产生多的任务
threadReadDataFlage = false;//关掉接收任务,预防产生多的任务
try {mthreadReadData.interrupt();} catch (Exception e1) {}
try {mthreadSendData.interrupt();} catch (Exception e2) {}
SendDataCnt = ;//清零发送的个数
}
}
}
}
其实就一点有用的,其余的大多数是重复的程序,下一篇优化一下....
可以用这个调试助手,老版的小五物联有一些调试的功能



我是用的两个手机哈,因为我做的那个调试助手,一关闭就会全都关闭了,,后期再优化下哈,,,,
亲们可以用电脑的调试助手,资料里面有


好现在咱们用板子试一下
不对不对...咱是做的先发给板子指令然后板子收到命令再回复.....忘了,现在做每隔1S发送一次0xaa,0x55,0x01

这样板子收到信息就回咱
实现定时器呢有多种实现方法,说一种最简单的
/**
* 每间隔1S发送一次采集数据的命令
*/
private CountDownTimer editDeleteTimer = new CountDownTimer(,) {
@Override
public void onTick(long millisUntilFinished) { } @Override
public void onFinish()
{
SendBuffer[] = (byte) 0xaa;
SendBuffer[] = 0x55;
SendBuffer[] = 0x01;
SendDataCnt = ;//控制发送数据的个数
editDeleteTimer.start();
}
};

启动和停止呢


现在试一下
板子上电正常运行哈...


刚才板子放在了我电脑的散热口附近,所以才会30度哈,我没有在非洲和赤道哈....,,电脑两天没有关机了,,有点小热.....
现在控制一下灯


下一篇一定要优化程序,不能这样子了,,,,,,额嗯,做TCP服务的时候再优化也行,重新写一切按照常规写


单片机程序还是上一篇的...
对了

数据&0xff
参考链接
https://blog.csdn.net/wwzuizz/article/details/77649358
亲们自己百度哈
下一篇链接
http://www.cnblogs.com/yangfengwu/p/8887909.html
9-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给AndroidTCP客户端显示)的更多相关文章
- 8-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给C#TCP客户端显示)
http://www.cnblogs.com/yangfengwu/p/8785516.html 先写单片机端的程序 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s ...
- 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)
前言:了解就行,不必深究 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8720148.html 源码链接:https://pan.baidu.com/s/1wT ...
- 10-51单片机ESP8266学习-AT指令(ESP8266连接路由器,建立TCP服务器,分别和C#TCP客户端和AndroidTCP客户端通信+花生壳远程通信)
http://www.cnblogs.com/yangfengwu/p/8871464.html 先把源码和资料链接放到这里 源码链接:https://pan.baidu.com/s/1wT8KAOI ...
- 1-51单片机ESP8266学习-AT指令(开发板介绍)
51单片机+ESP8266开发教程(AT指令篇) 开发板资源分布: 开发板部分原理图: 1--通信下载 2--51单片机 3--ESP8266(WIFI模块) 4--DHT11(温湿度传感器) 5-- ...
- 5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8759294.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8 ...
- 11-51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接TCP服务器,用串口调试助手和手机TCP调试助手测试)
写完题目刚想起来一件事情,如果手机作为客户端(不连接路由器的情况下),手机连接模块的无线会分配一个IP地址,,,这个IP地址事先我也不知道....我先看看AT指令里面有没有一个指令可以打印一下连接自己 ...
- 12,13,14节-51单片机ESP8266学习-AT指令(暂停更新)需要整理
从这一节开始,以视频加源码的形式,后期视频和程序将放在链接中 资料链接 链接: https://pan.baidu.com/s/1jpHZjW_7pQKNfN9G4B6ZjA 密码:nhn3 ...
- 3-51单片机ESP8266学习-AT指令(学会刷固件)
前言:体验一下刷固件(给单片机更新程序) 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8757036.html 源码链接:https://pan.baidu. ...
- 4-51单片机ESP8266学习-AT指令(测试TCP服务器--使用串口调试助手--不连接路由器)
上一篇连接 http://www.cnblogs.com/yangfengwu/p/8757513.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXN ...
随机推荐
- window的cmd命令行下新增/删除文件夹及文件
新增文件夹 (md / mkdir) md <folderName>: folderName 就是文件路径,只输入文件夹名称时表示在当前目录下创建文件夹. 比如:md F:\test\pr ...
- REM在edge浏览器中不重新计算解决
经过多分析和排查,此问题解决的方案 第一种: 在CSS样式中添加 body { font-size:100% } 如果不起作用,可以尝试将引用的REMjs放在head内引用
- 1145.cn 百度MIP适配实例
MIP,全称Mobile Instant Pages(移动端即时页面),是百度推出的一套移动端网页开放技术标准.网站移动端页面统计MIP改造,能实现页面缓存,从而达到移动网页加速效果. 百度官方已经明 ...
- Java JVM监控工具JConsole简介
Java JVM监控工具JConsole简介 jconsole命令 功能:打开java监视管理控制台 方法: jconsole [选项1] [选项2] …… [选项n] 常用选项: -help ...
- JS笔记(三):数组、函数、类
(一) 数组 //创建数组 var the_array = [1,2,3,4,'5'] console.log(the_array[0]) //读取索引为0的数据 the_array[5] = '赋值 ...
- MySQL写入用户微信名
很简单的需求,将用户微信名写入MySQl即可,但是测试过程中却遇到了问题,微信名中的emoji写入数据库失败.解决步骤如下 1.了解utf8mb4 MySQL从5.5.3版本开始支持utf8mb4编码 ...
- 自定义合并列:el-table
objectSpanMethod({ row, column, rowIndex, columnIndex }) {//合并规则 //当前行row.当前列column.当前行号rowIndex.当前列 ...
- 选择is或者as操作符而不是做强制类型转换
无论何时,正确选择使用as运算符进行类型转换.比盲目的强制类型转换更安全,而且在运行时效率更高. 用as和is进行转换时,并不是对所有用户定义的类型都能完成,只是在运行时类型和目标类型匹配时,转换才能 ...
- 【PAT】B1027 打印沙漏(20 分)
#include<cstdio> #include<stdlib.h> char C='*'; int qiushu(int hang){//输入行数,求出字符数 int su ...
- 4.93Python数据类型之(8)集合
目录 目录 前言 (一)基本概念 ==1.1有序于无序== ==1.2是否随机访问== ==1.3重复性== ==1.4可变与不可变的集合== (二)集合的增删改查 ==2.1集合的增加== ==2. ...