当前位置: 首页 > news >正文

Android硬件通信之 WIFI通信

一,简介

1.1 随着网络的普及和通信技术的发展,网络的传输速度也越来越快,wifi技术也还成为手机设备最基本的配置。我们可以通过wifi实现手机与手机之前的信息传输,当然也可以与任意一台有wifi模块的其它设备传输。

1.2 wifi与蓝牙是我们生活中最常见也是最常用的无线通信技术,当代智能家居基本也是基于这两种协议实现的。我们可以对比下两种技术,以便选择合适的通信方式:

对比蓝牙wifi
传输距离短,一般10m左右长,100m-400m左右
传输功耗功耗低,5mA功耗高,10-50mA
传输速度速度慢,1Mbps速度快,300Mbps
安全性能高,传输稳定低,密码被破解
应用领域穿戴设备,智能家居这些低功耗设备工厂设备,打印机这些大数据传输场景

1.3 随着物联网发展,无线通信技术已涉及到我们生活的各个角落,比如

工业领域

 智能家居

wifi通信成为这些物联网通信的一种重要技术,下面我们来看下wifi通信的详细步骤

二 wifi通信步骤

2.1 wifi通信前一定要使通信双方在一个局域网下,如果连接的是工厂机器,那机器上一般装有wifi模块

建立连接有两种方式

方式一:使手机和机器wifi都连接外网(就是你的室内的路由器的wifi),这样两个设备就在同一个局域网,就可以进行连接和通信

方式二:手机直接连接机器的wifi模块网络,这种有个弊端,无法上网,只能和机器的wifi传输数据。

所以一般步骤是先连接机器的wifi模块网络,然后打开网络配置网页,打开方式是浏览器输入wifi模块的IP地址(比如http://192.168.0.1),通过网络配置页面连接外网,这样手机既可以上网,请求服务器数据,又能和机器通信

2.2 创建IP,串口通讯地址,并通过Socket建立wifi连接

Runnable wifiConnectRunnable = new Runnable() {@Overridepublic void run() {try {IP = PreferencesUtils.getString(App.getInstance(), PreferencesUtils.MODEL_IP, "192.168.2.1");PORT = PreferencesUtils.getString(App.getInstance(), PreferencesUtils.MODEL_PORT, "9100");socketAddress = new InetSocketAddress(IP, Integer.parseInt(PORT)); //获取sockaddress对象socket = new Socket(); //实例化socketsocket.connect(socketAddress, 2000); //设置超时参数Log.e(TAG, "wifi: " + "wifi连接成功");handler.sendEmptyMessage(1);} catch (Exception e) {Log.e(TAG, "wifi: " + e.getMessage());e.printStackTrace();}}
};

2.3 获取Socket的IO流

mOutputStream = socket.getOutputStream();
mInputStream = socket.getInputStream();

2.4 读取wifi消息

private class ReadThread extends Thread {@Overridepublic void run() {super.run();while (!isInterrupted()) {int size;try {byte[] buffer = new byte[512];if (mInputStream == null) return;size = mInputStream.read(buffer);if (size > 0) {String mReception=new String(buffer, 0, size);String msg = mReception.toString().trim();Log.e(TAG, "接收短消息:" + msg);}} catch (IOException e) {e.printStackTrace();return;}}}
}

 2.5 发送wifi消息

private class WriteRunnable implements Runnable {@Overridepublic void run() {try {String cmd="KZMT;";Log.e(TAG, "发送短消息:" + cmd);mOutputStream.write(cmd.getBytes());mOutputStream.flush();} catch (IOException e) {}}
}

2.6 断开wifi的socket连接

/*** 关闭Wifi的Socket连接*/
public void closeWifiStream() {try {if (mOutputStream != null) {mOutputStream.close();mOutputStream = null;}if (mInputStream != null) {mInputStream.close();mInputStream = null;}if (socket != null) {socket.close();socket = null;}} catch (Exception e) {e.printStackTrace();}
}

 2.7 总结

wifi是一种局域网无线通信技术,所以必须使通信设备在同一个局域网段,然后维持一个socket长连接,获取IO流,通过IO流通道进行数据的传输。

相关文章:

Android硬件通信之 WIFI通信

一,简介 1.1 随着网络的普及和通信技术的发展,网络的传输速度也越来越快,wifi技术也还成为手机设备最基本的配置。我们可以通过wifi实现手机与手机之前的信息传输,当然也可以与任意一台有wifi模块的其它设备传输。 1.2 wifi与蓝…...

面试官:“请描述一下Android系统的启动流程”

作者:OpenGL 前言 什么是Android启动流程呢?其实指的就是我们Android系统从按下电源到显示界面的整个过程。 当我们把手机充好电,按下电源,手机会弹出相应启动界面,在等了一段时间之后,会弹出我们熟悉的主…...

k8s delete node 后 重启kubelet会自己加入到集群 ?

原因 当执行kubectl delete node命令时,Kubernetes API服务器会收到该节点的删除请求,并将其从集群中删除。此时,kubelet服务在该节点上仍然在运行,但已经不再与集群通信。 当您重启kubelet服务时,它会重新向API服务…...

REXROTH液压方向阀安装须知

安装规程 阀安装到系统之前,应该对照订货型号比较其型号说明。 确认阀的连接表面和底板无水分,没有油。 - 清洁: ‧ 安装元件时,确认工业阀和周围干净 ‧ 油箱须密闭,以防止外部污染 ‧ 安装之前&…...

【数据结构实验】哈夫曼树

【数据结构实验】哈夫曼树 简介: 为一个信息收发站编写一个哈夫曼码的编/译码系统。文末贴出了源代码。 需求分析 完整的系统需要具备完整的功能,包含初始化、编码、译码、印代码文件和印哈夫曼树,因此需要进行相应的文件操作进行配合。哈…...

浏览器不好用?插件来帮忙

一、目的 浏览器本身具备的功能并不完善,不同的用户可以为自己浏览器增加想要功能,使得浏览器更能符合自己的需求,提高浏览器使用的舒适度 二、推荐插件 AdblockPlus LastPass(密码记录,全平台通用) Dar…...

Qt Quick - 容器控件综述

Qt Quick - 容器控件综述 一、概述二、ApplicationWindow Control三、Frame Control四、GroupBox Control五、Page Control六、Pane Control七、ScrollView Control八、StackView Control九、SwipeView Control十、TabBarControl十一、ToolBar控件 一、概述 Qt Quick Controls…...

面试题30天打卡-day06

1、什么是反射机制?说说反射机制的优缺点、应用场景? 反射机制:Java的反射机制是在运行状态,对于任意一个类,都能够动态的获得这个类的属性和方法;对于一个对象,都能动态的调用它当中的方法和属…...

Spring Boot的基础使用和< artifactId>spring-boot-maven-plugin</ artifactId>爆红的处理

Spring Boot的基础使用和< artifactId>spring-boot-maven-plugin</ artifactId>爆红的处理 Spring Boot概述 微服务概述 微服务Microservices是一种软件架构风格&#xff0c;他是以专注于单一责任与功能的小型功能区块Small Building Blocks 为基础&#xff0c;…...

项目管理中的必不可少的强大工具有哪些?

在项目管理中&#xff0c;我们总是想寻求一套功能强大的工具&#xff0c;来满足我们多样化的需求。但往往事与愿违&#xff0c;这样强大的工具总是费用高&#xff0c;操作复杂&#xff0c;需安装多个插件。下面&#xff0c;我就给大家推荐一款项目管理软件 ~Zoho Projects&…...

嵌入式学习笔记——SPI通信的应用

SPI通信的应用 前言屏幕分类1.3OLED概述驱动芯片框图原理图通信时序显示的方式页地址、列地址初始化指令 程序设计初始化代码初始化写数据与写命令清屏函数 初始化代码字符显示函数 总结 前言 上一篇中介绍了STM32的SPI通信&#xff0c;并根据框图和寄存器进行了SPI通信的初始…...

.Net下企业应用系统架构构建心得

在开始架构设计之前&#xff0c;需要了解一下架构是什么&#xff0c;按照IEEE标准的定义是&#xff1a; Architecture 是一个系统的基本组织&#xff0c;它蕴含于系统的组件中、组件之间的相互关系中、组件与环境的相互关系中、以及呈现于其设计和演进的原则中。 (The embodied…...

【社区图书馆】关于Mybatis原理学习的读后感

1、为什么会看原理书籍 Mybatis是我们Java后端开发中的主流ORM框架&#xff0c;基本都会在工作中用到。所以&#xff0c;是既熟悉&#xff0c;又陌生。熟悉是因为一直都在使用&#xff0c;而陌生则是对于其内部原理还不够深入。刚好近期的工作中&#xff0c;又遇到了一个需求&a…...

C++ Primer阅读笔记--表达式和运算符的使用

1--左值和右值 C 的表达式有右值&#xff08;rvalue, are-value&#xff09;和左值&#xff08;lvalue, ell-value&#xff09;两个形式&#xff1b;当一个对象被用作右值时&#xff0c;使用的是对象的值&#xff08;内容&#xff09;&#xff1b;当对象被用作左值时&#xff0…...

npm install xxx的执行过程及示例

当你在终端中执行npm install xxx命令时&#xff0c;npm会执行以下步骤来安装软件包&#xff1a; 检查本地npm缓存中是否有该软件包。 如果本地npm缓存中已经存在该软件包&#xff0c;npm将直接从缓存中提取软件包并安装。这将显著加快安装速度&#xff0c;因为npm无需从网络下…...

excel数据分析比赛

基础 sql:百度网盘 请输入提取码 excel函数 <...

Git使用GitHub说明

GitHub为公网代码托管仓库&#xff0c;Git可以将本地仓库推送到GitHub管理。 步骤&#xff1a;1、注册GitHub账号 2、创建仓库&#xff08;会得到一个仓库地址&#xff09; 3、推送本地仓库 git remote add origin https://github.com/jianshengchuanqi/xuesezhanjiang.git…...

这些不可不知的JVM知识

JVM是面试中必问的部分&#xff0c;本文通过思维导图以面向面试的角度整理JVM中不可不知的知识。 先上图&#xff1a; JVM必备知识 1、JVM基本概念 1.1、JVM是什么 JVM 的全称是 「Java Virtual Machine」&#xff0c;也就是我们耳熟能详的 Java 虚拟机。 JVM具备着计算机的…...

基于RK3568的Linux驱动开发——GPIO知识点(一)

authordaisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主系列基于RK3568的Linux驱动开发—— GPIO知识点&#xff08;二&#xff09;_daisy.skye的博客-CSDN博客 gpio bank RK3568 有 5 组 GPIO bank&#xff1a;GPIO0~GPIO4&#xff0c;每组又以 A0-A7、B0-B7、 C0-C7、 D0…...

5.2.1二叉树的定义和基本术语

二叉树的基本概念&#xff1a; 二叉树是递归定义的二叉树 下面我们来看几个特殊的二叉树&#xff1a; 特点&#xff1a; 1&#xff09;只有最后一层有叶子节点 2&#xff09;不存在度为1的结点 3&#xff09;按层序从1开始编号&#xff0c;结点i的左孩子为2i&#xff0c;右孩…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...