
- 外文名
- wifi module
- 主要功能
- 实现串口、TTL到无线网络转换
- 网络协议
- IEEE802.11协议栈、TCP/IP协议栈
- 产品性质
- wifi通信的传输转换产品
- 中文名
- wifi模块
- 应用领域
- 无线网络
-
wifi模块
2020-09-15 16:01:36简单介绍一下wifi模块涉及的终端命令前言
简单介绍一下wifi模块涉及的终端命令
创建wifi任务
终端输入命令:
stack_wifi
连接wifi
终端输入命令:
wifi_sta_connect <ssid> <pwd>
示例如下
wifi_sta_connect LeapFive_SD leapfive
成功连接wifi会打印wifi和memory相关信息
ping
测试ping主机
ping -c 4 172.17.254.20
断开wifi
终端输入命令:
wifi_sta_disconnect
成功断开连接后会打印断开连接的log。
扫描wifi:
终端输入命令:
wifi_scan
扫描成功后会打印scan list,用户可以看到成功搜索的wifi信息。
开启ap模式:
终端输入命令:
wifi_ap_start
内部的关键api
wifi_mgmr_ap_start(wifi_interface, ssid_name, hidden_ssid, "12345678", channel);
成功开启后打印ssid,pwd,channel等相关信息,并且可以在手机上搜索到相应名字的wifi。
关闭ap模式:
终端输入命令:
wifi_ap_stop
成功关闭ap模式后手机无法搜索到对应wifi。
-
WIFI模块
2013-10-28 15:45:20什么是WIFI WIFI是一种无线连接技术,可用于PC,PDA,手机等终端。WIFI的目的是改善基于IEEE802.11标准的无线网络产品...简单介绍一下,WIFI模块的基本功能: 开关WIFI 除了在WIFI设置界面可以开关WI-
什么是WIFI
WIFI是一种无线连接技术,可用于PC,PDA,手机等终端。WIFI的目的是改善基于IEEE802.11标准的无线网络产品之间的互通性,也就是说WIFI是基于802.11标准的,但WIFI不等同无线网络。
-
android平台下的WIFI模块
简单介绍一下,WIFI模块的基本功能:
-
开关WIFI
除了在WIFI设置界面可以开关WIFI,还有其他的入口可以开关,要查看这些开关状态是否一致。还有就是飞行模式对WIFI开关的影响,由于WIFI开和关都有一个时间过程,而飞行模式的开关瞬间完成,所以有时会出现冲突。
-
开关新可用网络提醒
新可用网络的定义是自WIFI模块开启后,从未发现过的,为加密的网络。只有满足了新可用网络的定义,才会有提醒。
-
连接断开网络
连接断开各种不同加密类型的网络(具体类型下文有详解)
-
手动添加网络
需要路由器关闭SIID广播。可手动输入SIID,网络加密类型,密码。对于OPAL手机来说,路由器隐藏了SSID,手动添加的网络是无法连接的。
-
搜索网络
手动点击搜索按钮可以搜索网络,也可以等待WIFI模块自动搜索网络。
-
休眠设置
由于WIFI模块是用电大户,所有为了省电,android的WIFI加了一个休眠策略,可以设置永远不断开,充电时不断开和锁屏时断开。要测试休眠设置是否有效,可以在路由器上PING手机的IP,PING通就是连接状态。OPAL手机的休眠策略属于完全失效,现在的情况是无论选哪个都会一直保持连接,锁屏后15分钟再休眠。
-
设置静态IP
Android系统里对IP设置的输入限制很有问题,我一直认为这是弱智的限制。正常IP的范围在0-255之间,android对IP输入的限制是整数0到整数255之间,也就是说0000.000200.001.001这样一个IP都能合法输入。
-
对WIFI模块深入了解一点点
-
WIFI的基本运行流程
【初始化】
1在SystemServer启动的时候,会生成一个ConnectivityService的实例2 ConnectivityService的构造函数会创建WifiService
3 WifiStateTracker会创建WifiMonitor接收来自底层的事件,WifiService和WifiMonitor是整个模块的核心。WifiService负责启动关闭wpa_supplicant、启动关闭WifiMonitor监视线程和把命令下发给wpa_supplicant,而WifiMonitor则负责从wpa_supplicant接收事件通知。
【连接AP】
1 WirelessSettings在初始化的时候配置了由WifiEnabler来处理Wifi按钮
2当用户按下Wifi按钮后, Android会调用WifiEnabler的onPreferenceChange,再由WifiEnabler调用WifiManager的setWifiEnabled接口函数,通过AIDL,实际调用的是WifiService的setWifiEnabled函数,WifiService接着向自身发送一条MESSAGE_ENABLE_WIFI消息,在处理该消息的代码中做真正的使能工作:首先装载WIFI内核模块(该模块的位置硬编码为"/system/lib/modules/wlan.ko" ),然后 启 动wpa_supplicant (配置 文 件 硬 编 码 为"/data/misc/wifi/wpa_supplicant.conf")再通过WifiStateTracker来启动WifiMonitor中的监视线程
3当使能成功后,会广播发送WIFI_STATE_CHANGED_ACTION这个Intent通知外界WIFI已经 成 功 使 能 了 。WifiEnabler创建 的 时 候 就 会 向Android注册 接 收WIFI_STATE_CHANGED_ACTION,因此它会收到该Intent,从而开始扫描
【查找AP】
1扫描的入口函数是WifiService的startScan,它其实也就是往wpa_supplicant发送SCAN命令。
2当wpa_supplicant处理完SCAN命令后,它会向控制通道发送事件通知扫描完成,从而wifi_wait_for_event函数会接收到该事件,由此WifiMonitor中的MonitorThread会被执行来出来这个事件。
3 WifiStateTracker则接着广播发送SCAN_RESULTS_AVAILABLE_ACTION这个Intent。
4 WifiLayer注册了接收SCAN_RESULTS_AVAILABLE_ACTION这个Intent,所以它的相关处理函数handleScanResultsAvailable会被调用,在该函数中,先会去拿到SCAN的结果(最终是往wpa_supplicant发送SCAN_RESULT命令并读取返回值来实现的),List<ScanResult> list = mWifiManager.getScanResults();对每一个扫描返回的AP,WifiLayer会调用WifiSettings的onAccessPointSetChanged函数,从而最终把该AP加到GUI显示列表中。
【配置AP参数】
当用户在WifiSettings界面上选择了一个AP后,会显示配置AP参数的一个对话框。
showAccessPointDialog(state, AccessPointDialog.MODE_INFO);
【连接】
当用户在AcessPointDialog中选择好加密方式和输入密钥之后,再点击连接按钮,Android就会去连接这个AP。
1 WifiLayer会先检测这个AP是不是之前被配置过,这个是通过向wpa_supplicant发送LIST_NETWORK命令并且比较返回值来实现的,
//Need WifiConfiguration for the AP
WifiConfiguration config = findConfiguredNetwork(state);
如果wpa_supplicant没有这个AP的配置信息,则会向wpa_supplicant发送ADD_NETWORK命令来添加该AP
2 ADD_NETWORK命令 会 返 回 一 个ID,WifiLayer再用 这 个 返 回 的ID作为参数向wpa_supplicant发送ENABLE_NETWORK命令,从而让wpa_supplicant去连接该AP。
【配置IP地址】
1当wpa_supplicant成功连接上AP之后,它会向控制通道发送事件通知连接上AP了,从而wifi_wait_for_event函数会接收到该事件,由此WifiMonitor中的MonitorThread会被执行来出来这个事件
2 WifiMonitor再调用WifiStateTracker的notifyStateChange,WifiStateTracker则接着会往自身发送EVENT_DHCP_START消息来启动DHCP去获取IP地址
3然后再广播发送NETWORK_STATE_CHANGED_ACTION这个Intent
4 WifiLayer注册了接收NETWORK_STATE_CHANGED_ACTION这个Intent,所以它的相关处理函数handleNetworkStateChanged会被调用,当DHCP拿到IP地址之后,会再发送EVENT_DHCP_SUCCEEDED消息
5 WifiLayer处理EVENT_DHCP_SUCCEEDED消息,会再 次 广 播 发 送
至此为止,整个连接过程完成
2. wpa_supplicant
Android平台使用的WiFi控制框架是基于大名鼎鼎的wpa_supplicant,它是一个安全中间件,为各种无线网卡提供统一的安全机制,如下图所示:
对应上述结构,基于Android的手机中的WiFi控制分为三大组件:
1)客户端程序,包括wpa_cli命令行或java图形界面程序,通过unix本地socket与
wpa_supplicant daemon服务通信,发送命令并接收结果;
2)wpa_supplicant daemon服务,对应上述中间部分,功能是“上传下达”。所有客户端通过它控制硬件网卡,通过发送字符串命令控制是否扫描AP,提取扫描结果和是否关联AP等操作,同时将驱动的执行状态发送给用户。该服务是设计支持多种无线网卡芯片,因此各个厂商共同提供了一个通用接口给wpa_supplicant调用;
3)网卡驱动;在手机内存的/etc/wpa_supplicant.conf中我们可以直接看到WIFI支持的网络类型,每种类型都有例子,比如:
#Both WPA-PSK and WPA-EAP is accepted. Only CCMP is accepted as pairwise and
# group cipher.
#network={
# ssid="example"
# bssid=00:11:22:33:44:55
# proto=WPA RSN
# key_mgmt=WPA-PSK WPA-EAP
# pairwise=CCMP
# group=CCMP
# psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
#}
不同类型的网络,不同的参数等等,应有尽有。
-
对WIFI模块的LOG了解多一点点
我们在上面已经知道WIFI的启动过程,在功能运行中也会输出相应的日志信息,下面就来详细了解一下。(请注意,WIFI开启后会更改电池状态等其他状态。关闭WIFI时,android的策略是卸载驱动来省电。如有缺失就是问题。不过下文删去了与WIFI无关的LOG!)
1.开启WIFI&自动搜索
E/WifiHW ( 1201): ==JOHN DEBUG==: [WIFI] Load Driver
加载驱动
D/SettingsWifiEnabler( 1321): Received wifi state changed from Disabled to Enabling
接收到广播:WIFI正在开启
D/WifiService( 1201): ACTION_BATTERY_CHANGED pluggedType: 2
电池状态改变
E/WifiHW(1201):==JOHNDEBUG==:moduleaddress:4b938008 filename:/system/lib/modules/dhd.ko args:firmware_path=/system/wlan/broadcom/rtecdc.bin nvram_path=/system/wlan/broadcom/nvram.txt
WIFI硬件:加载内核模块
I/wpa_supplicant( 2490): CTRL-EVENT-STATE-CHANGE id=-1 state=2
wpa_supplicant发出事件通知
V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=2]
WifiMonitor从wpa_supplicant接收事件通知
I/wpa_supplicant( 2490): CTRL-EVENT-SCAN-RESULTS Ready
wpa_supplicant发出事件通知:准备好开始搜索网络了
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-ACTIVE len = 4096
wpa_supplicant发出事件通知:驱动命令行.主动搜索.LEN
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-ACTIVE len = 0, 11
wpa_supplicant发出事件通知:驱动命令行.主动搜索.LEN
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-PASSIVE len = 4096
wpa_supplicant发出事件通知:驱动命令行.被动搜索.LEN
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-PASSIVE len = 0, 12
wpa_supplicant发出事件通知:驱动命令行.被动搜索.LEN=0.12
D/SettingsWifiEnabler( 1321): Received wifi state changed from Enabling to Enabled
接收到广播:WIFI已经开启
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd RSSI len = 4096
wpa_supplicant发出事件通知:
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd RSSI len = 4, 4
wpa_supplicant发出事件通知:
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd LINKSPEED len = 4096
wpa_supplicant发出事件通知:
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd LinkSpeed 54 len = 12, 12
wpa_supplicant发出事件通知:
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd MACADDR len = 4096
wpa_supplicant发出事件通知:驱动命令行.MAC地址.LEN
E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd Macaddr = 44:A4:2D:27:25:BE
wpa_supplicant发出事件通知:驱动命令行.MAC地址
E/wpa_supplicant( 2490): len = 28, 28
wpa_supplicant发出事件通知:
V/WifiStateTracker( 1201): Connection to supplicant established, state=SCANNING
WIFI状态跟踪:连接请求确认,状态=搜索
D/NetworkStateTracker( 1201): setDetailed state, ld =IDLE and new state=SCANNING
网络状态跟踪:更新显示为搜索状态
V/WifiStateTracker( 1201): Changing supplicant state: SCANNING ==> INACTIVE
WIFI状态跟踪:更改请求状态:搜索中->不活动
2.点击连接&获取状态
E/WifiHW ( 1201): ==JOHN DEBUG==: [WIFI] Load Driver
WIFI硬件:加载驱动
D/SettingsWifiEnabler( 1321): Received wifi state changed from Disabled to Enabling
收到广播,WIFI状态正在开启
E/WifiHW(1201):==JOHNDEBUG==:moduleaddress:4b938008 filename:/system/lib/modules/dhd.ko args:firmware_path=/system/wlan/broadcom/rtecdc.bin nvram_path=/system/wlan/broadcom/nvram.txt
WIFI硬件:加载内核模块
E/WifiHW ( 1201): ==JOHN DEBUG==: return of insmod : ret = 0, Unknown error: 0
WIFI硬件:返回装载模块报告:返回指令0,未知错误0
……
I/wpa_supplicant( 2490): Trying to associate with 1c:bd:b9:f6:a7:9f (SSID='LosAngeles' freq=2412 MHz)
wpa_supplicant发出事件通知:尝试连接,(SSID='LosAngeles'频段=2412 MHz)
V/WifiMonitor( 1201):Event[Trying to associate with 1c:bd:b9:f6:a7:9f (SSID='LosAngeles' freq=2412 MHz)]
WifiMonitor接收wpa_supplicant的事件
V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=3]
WifiMonitor接收事件
V/WifiStateTracker( 1201): Changing supplicant state: SCANNING ==> ASSOCIATING
WIFI状态跟踪:更改请求状态:搜索中->匹配中
D/NetworkStateTracker( 1201): setDetailed state, ld =SCANNING and new state=CONNECTING
网络状态跟踪:更新显示为正在连接状态
D/ConnectivityService( 1201): ConnectivityChange for WIFI: CONNECTING/CONNECTING
连接管理服务:改变WIFI连接状态:正在连接/正在连接
V/WifiStateTracker( 1201): Changing supplicant state: ASSOCIATING ==> ASSOCIATED
WIFI状态跟踪:更改请求状态:匹配中->已匹配
D/NetworkStateTracker( 1201): setDetailed state, ld =CONNECTING and new state=CONNECTING
网络状态跟踪:更新显示为正在连接状态
I/wpa_supplicant( 2490): Associated with 1c:bd:b9:f6:a7:9f
wpa_supplicant发出事件通知:已和1c:bd:b9:f6:a7:9f匹配
V/WifiMonitor( 1201): Event [Associated with 1c:bd:b9:f6:a7:9f]
WifiMonitor接收wpa_supplicant的事件
V/WifiStateTracker( 1201): Changing supplicant state: ASSOCIATED ==> FOUR_WAY_HANDSHAKE
WIFI状态跟踪:更改请求状态:已匹配->TCP中断连接
D/NetworkStateTracker( 1201): setDetailed state, ld =CONNECTING and new state=AUTHENTICATING
网络状态跟踪:更新显示为鉴定中
D/ConnectivityService( 1201): Dropping ConnectivityChange for WIFI: CONNECTING/AUTHENTICATING
连接管理服务:抛出WIFI连接状态改变:已连接/鉴定中
V/WifiStateTracker( 1201): Changing supplicant state: FOUR_WAY_HANDSHAKE ==> GROUP_HANDSHAKE
WIFI状态跟踪:更改请求状态:TCP中断连接->确认标志位
D/NetworkStateTracker( 1201): setDetailed state, ld =AUTHENTICATING and new state=AUTHENTICATING
网络状态跟踪:更新显示为鉴定中
I/wpa_supplicant( 2490): WPA: Key negotiation completed with 1c:bd:b9:f6:a7:9f [PTK=CCMP GTK=TKIP]
wpa_supplicant发出事件通知:WPA:与1c:bd:b9:f6:a7:9f确定标志位
I/wpa_supplicant( 2490): CTRL-EVENT-STATE-CHANGE id=0 state=7
wpa_supplicant发出事件通知:
I/wpa_supplicant( 2490): CTRL-EVENT-CONNECTED - Connection to 1c:bd:b9:f6:a7:9f completed (auth) [id=0 id_str=]
wpa_supplicant发出事件通知:连接完成
V/WifiMonitor( 1201): Event [WPA: Key negotiation completed with 1c:bd:b9:f6:a7:9f [PTK=CCMP GTK=TKIP]]
WifiMonitor接收wpa_supplicant事件
V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=0 state=7]
WifiMonitor接收wpa_supplicant事件
V/WifiMonitor( 1201): Event [CTRL-EVENT-CONNECTED - Connection to 1c:bd:b9:f6:a7:9f completed (auth) [id=0 id_str=]]
WifiMonitor接收wpa_supplicant事件
V/WifiStateTracker( 1201): Changing supplicant state: GROUP_HANDSHAKE ==> COMPLETED
WIFI状态跟踪:更改请求状态:确认标志位->完成
V/WifiStateTracker( 1201): New network state is CONNECTED
WIFI状态跟踪:新网络状态为已连接
D/NetworkStateTracker( 1201): setDetailed state, ld =AUTHENTICATING and new state=OBTAINING_IPADDR
网络状态跟踪:更新显示为获取IP地址
D/ConnectivityService( 1201): Dropping ConnectivityChange for WIFI: CONNECTING/OBTAINING_IPADDR
连接管理服务:抛出WIFI
-
-
QCA9331WiFi模块 QCA9331WiFi模块开发.pdf
2019-09-12 16:12:50QCA9331WiFi模块 QCA9331WiFi模块开发pdf,QCA9331WiFi模块 QCA9331WiFi模块开发 -
51单片机通过WIFI模块ESP8266控制LED灯
2018-06-16 18:47:40手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而...写在前面:
本想将该设计全部开源,无奈理想丰满现实骨感,笔者不得不为五斗米折腰,为了小公主奶粉钱,已将全部源码设计资料和焊接成品挂在了某宝:
https://item.taobao.com/item.htm?ft=t&id=626621440543一、系统方案
手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而实现对LED灯进行开关控制。
设计好的实物是这个样子:
二、硬件设计
ESP8266模块作为一个透传模块使用,RXD、TXD分别连接51单片机的TXD和RXD,VCC和CH_PD管脚接3.3V电压,GND接地,只需要连接这些管脚,ESP8266模块就可以正常工作了。在单片机P2口上连接了三个5mm的LED灯,分别是红黄蓝三种颜色,我们的目的是通过手机APP上的开关控制着三个LED灯的亮灭。
ESP8266实物管脚图
三、单片机软件设计
硬件的连接不复杂,接下来主要是单片机和手机APP代码的编写。
单片机代码主要是串口初始化、串口中断和ESP8266的初始化。首先是串口初始化:
TMOD=0x20; //定时器1工作在方式2 TH1 = 0xfd; //波特率9600 TL1 = 0xfd; SM0=0; //串口工作在方式1 SM1=1; EA = 1; //开总中断 REN = 1; //使能串口 TR1 = 1; //定时器1开始计时
然后是ESP8266初始化:
delayms(1000); //延时 sendString("AT+CWMODE=2\r\n"); //设置ESP8266工作在AP模式下 delayms(1000); sendString("AT+CIPMUX=1\r\n"); //允许多连接 delayms(1000); sendString("AT+CIPSERVER=1\r\n"); //建立服务器 delayms(1000); ES = 1; //esp8266初始化之后开串口中断
贴上51单片机负责串口发送的两个函数:
//发送一个字节 void sendChar(uchar a) { SBUF = a; while(TI==0); TI=0; } //发送字符串 void sendString(uchar *s) { while(*s!='\0') { sendChar(*s); s++; } }
在串口中断中处理接收到的数据:
1:打开红色灯 2:关闭红色灯
3:打开黄色灯 4:关闭黄色灯
5:打开蓝色灯 6:关闭蓝色灯
esp8266在收到数据并转发给单片机时的数据格式:+IPD,<client号>,<收到的字符长度>:收到的字符,比如+IPD,0,5:hello,其中+PID是固定的;0代表的是TCP客户端编号,esp8266最多支持5个客户端同时连接,也就是说客户端编号是0到4,在本设计中由于只有一个客户端与esp8266相连,所以客户端编号是0;5代表收到的字符长度;hello是收到的字符。在本例中esp8266发送给单片机的数据是+IPD,0,1:1,我们把接收到的字符串缓存到字符数组中,所以在处理收到的数据逻辑中,首先判断是否是以'+'开始的,否则视作无效数据,然后判断数组中的第十个数据,因为第十个数据才是上位机发送过来的数据。
void uart() interrupt 4 { if(RI == 1) { RI = 0; //清除串口接收标志位 receiveTable[i]=SBUF; if(receiveTable[0]=='+') { i++; } else { i=0; } if(i==10) { i=0; switch(receiveTable[9]) { case '1': RedLED=0; break; case '2': RedLED=1; break; case '3': YellowLED=0; break; case '4': YellowLED=1; break; case '5': BlueLED=0; break; case '6': BlueLED=1; break; } } } }
四、Android APP软件设计
Android APP是借助Android Studio来开发的,界面比较简单,通过编辑框输入esp8266的IP地址和端口号,esp8266默认的IP地址是192.168.4.1,端口号是333,这些都可以通过AT指令进行修改。布局页面的xml代码我们就不贴了,熟悉Android开发的读者很快就能根据截图编写出来,放上一个APP界面的截图:
我们主要看一下逻辑代码部分:
首先是控件的初始化和按钮点击事件回调的绑定
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnConnect = (Button) findViewById(R.id.btn_connect); mEtIP = (EditText) findViewById(R.id.et_ip); mEtPort = (EditText) findViewById(R.id.et_port); mBtnRedOn = (Button) findViewById(R.id.btn_red_on); mBtnRedOff = (Button) findViewById(R.id.btn_red_off); mBtnYellowOn = (Button) findViewById(R.id.btn_yellow_on); mBtnYellowOff = (Button) findViewById(R.id.btn_yellow_off); mBtnBlueOn = (Button) findViewById(R.id.btn_blue_on); mBtnBlueOff = (Button) findViewById(R.id.btn_blue_off); mBtnConnect.setOnClickListener(this); mBtnRedOn.setOnClickListener(this); mBtnRedOff.setOnClickListener(this); mBtnYellowOn.setOnClickListener(this); mBtnYellowOff.setOnClickListener(this); mBtnBlueOn.setOnClickListener(this); mBtnBlueOff.setOnClickListener(this); }
按钮的点击回调方法:
public void onClick(View v) { switch (v.getId()) { case R.id.btn_connect: //连接 if (mSocket == null || !mSocket.isConnected()) { String ip = mEtIP.getText().toString(); int port = Integer.valueOf(mEtPort.getText().toString()); mConnectThread = new ConnectThread(ip, port); mConnectThread.start(); } if (mSocket != null && mSocket.isConnected()) { try { mSocket.close(); mBtnConnect.setText("连接"); } catch (IOException e) { e.printStackTrace(); } } break; case R.id.btn_red_on: //开红灯 if (out != null) { out.print("1"); out.flush(); } break; case R.id.btn_red_off: //关红灯 if (out != null) { out.print("2"); out.flush(); } break; case R.id.btn_yellow_on: if (out != null) { out.print("3"); out.flush(); } break; case R.id.btn_yellow_off: if (out != null) { out.print("4"); out.flush(); } break; case R.id.btn_blue_on: if (out != null) { out.print("5"); out.flush(); } break; case R.id.btn_blue_off: if (out != null) { out.print("6"); out.flush(); } break; } }
负责连接esp8266的线程:
private class ConnectThread extends Thread { private String ip; private int port; public ConnectThread(String ip, int port) { this.ip = ip; this.port = port; } @Override public void run() { try { mSocket = new Socket(ip, port); out = new PrintStream(mSocket.getOutputStream()); runOnUiThread(new Runnable() { @Override public void run() { mBtnConnect.setText("断开"); } }); new HeartBeatThread().start(); } catch (IOException e) { e.printStackTrace(); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show(); } }); } } }
本文完!
-
AMPAK正基WIFI模块定频软件-适用AP系列所有WIFI模块
2020-07-16 15:33:31AMPAK正基WIFI模块定频软件-适用AP系列所有WIFI模块,AP6181,AP6212,AP6236,AP6255,AP6256等WIFI模组都可适用,世联芯科技长期供应AMPAK正基AP全系列模组.提供技术支持! -
WIFI模块库
2018-11-26 00:29:07WIFI模块库,用于台产的24L01 WIFI模块库,用于台产的24L01 -
WIFI模块源码
2018-11-08 15:41:15wifi模块控制源码 -
嵌入式WIFI模块 串口转WIFI模块 操作演示教程
2011-12-16 17:31:52嵌入式WIFI模块 串口转WIFI模块 操作演示教程 嵌入式WIFI模块 串口转WIFI模块 操作演示教程 -
WiFi模块种类一:单WiFi功能单频WiFi模块
2018-05-18 17:18:39其中网卡类WiFi模块通信接口、通信信道、综合功能可以大体分成八大系列(USB接口单频单通道WiFi模块、USB接口单通道多功能高性能WiFi模块、USB接口双通道单/双频WiFi模块、USB接口双通道双频高性能多功能一体WiFi...前面有把WiFi模块分成网卡类和AP类两大类进行分析。
其中网卡类WiFi模块通信接口、通信信道、综合功能可以大体分成八大系列(USB接口单频单通道WiFi模块、USB接口单通道多功能高性能WiFi模块、USB接口双通道单/双频WiFi模块、USB接口双通道双频高性能多功能一体WiFi模块、SDIO接口单频单通道WiFi模块、SDIO接口单通道多功能高性能WiFi模块、SDIO接口双通道单/双频高性能多功能WiFi模块、PCIe接口无线网卡式WiFi模块);AP类的WiFi模块可以分为嵌入式AP模块(核心板方式,只引出接口pin脚)和AP主板(也就是不带壳子和天线的成品)
这样分类比较繁多,对于选择应用估计会比较迷糊,接下来针对网卡类WiFi模块从功能上分成以下(单频WiFi模块、双频WiFi模块、WiFi蓝牙二合一模块)三大部分来进行剖析,会显得更加直观!
WiFi模块种类一:单WiFi功能单频WiFi模块
单频也就是工作在ISM2.4频段下,目前没有单独在ISM5G的(除了大功率版本只能选择单频放大);
频率范围:ISM2.4G(2.400GHz~2.497GHz);
符合IEEE 802.11b/g/n标准;
其它只要考虑芯片的方案、模块的封装尺寸、通信通道数量(1T1R、2T2R)、通信接口(USB、SDIO、PCIe)、供电电压、天线的处理方式了!
1.1:USB接口1T1R单通道的方案主要有:RTL8188系列、MT7601UN、AR9271、RT3070;尺寸封装以12.9*12.2mm/LGA-6和27*15mm/LGA-6为主;
1.2:USB接口2T2R双通道的方案主要有:RTL8192EU、RTL8192CU、AR1021G、MT7603UN;尺寸封装以27*15mm/LGA-6为主;
2.1:SDIO接口1T1R单通道的方案主要有:RTL8189系列、AR6302、88W8801、BCM43362、ESP8089、SV6030P、SP6051P;尺寸封装12*12mm/LGA-44和13.5*13/LGA-14以及14*12.5/LGA13为主;
2.2:SDIO接口2T2R双通道的方案主要有:RTL8192ES;尺寸封装以15*13mm/LGA-50为主;
3.0:PCIe接口的方案主要有:RTL8188EE(1T1R)、RTL8192EE/AR9287/AR9283(2T2R);尺寸封装以30*26.7/PCIe-52为主;
通过以下列表,一看就比较清楚!
下期将探讨WiFi模块种类二:单WiFi功能双频WiFi模块 -
太极里面的wifi模拟模块是什么_WiFi模块是什么?WiFi模块实现智能控制方案
2020-12-28 12:35:08一、WiFi模块是什么?有什么作用?WiFi模块属于物理网络传输层,具有内置的无线网络协议IEEE802.11b.gn协议栈和TCP / IP协议栈。串行端口或TTL级别是WiFi无线网络通信标准。许多可以连接到网络的传统设备都被嵌入... -
esp8266 WiFi模块资料(WiFi模块、AT指令样例+esp8266等)打包下载
2019-01-29 11:06:18esp8266 WiFi模块资料(WiFi模块、AT指令样例+esp8266等)打包下载 -
ESP8266 WIFI模块学习之路(4)——WIFI模块与Android互相通信
2018-08-30 11:16:19之前写的:ESP8266 WIFI模块学习之路(3)是WIFI模块向单片机发送信息,我们绝不能满足于仅仅是给单片机下发数据,我们还想自己接受数据,只有这样互相通信才是真正的物联网技术。因此,我就在研究如何实现WIFI模块... -
WIFI模块说明
2018-11-11 22:47:42WIFI模块,可同时具体STA和AP模式,STA模式可与客户端通信,控制单片机;AP模式为热点模式,可与上位机通信;可单独使用或一起使用。 -
WIFI模块相关
2020-12-07 20:22:53第一种方法:wifi模块工作在AP模式,智能终端(手机、平板)直接接入wifi模块提供的网络,在同一个热点网络实现无线控制。(如图一左边) 但是由于wifi模块工作AP模式也就是热点模式下,它接入的智能设备端有限,我... -
WIFI模块开发之认识WiFi模块(1)
2020-02-12 00:57:061,通用串口wifi模块 2,ESP8266系列模组 3,特性 4,选型 -
WIFI模块与串口通信
2018-09-09 20:43:00WIFI与串口之间的通信,WiFi模块.WIFI与串口之间的通信,WiFi模块. -
SKYLAB:物联网常见无线通信模块中的WiFi模块,蓝牙模块认识.pdf
2021-01-12 16:36:09SKYLAB面向物联网市场中的智慧物流,智能交通,智慧安防,智慧能源...USB接口WiFi模块,AP/Router无线路由WiFi模块及远距离图传WiFi模块,高清视频传输WiFi模块及BLE/4.2/5.0低功耗蓝牙模块等嵌入式无线WiFi模块产品。 -
WIFI模块.zip
2020-03-27 16:56:04ESP8266 WIFI模块用户手册,详细使用教程。 ESP8266 是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行,也可以作为 slave 搭载于其他 Host 运行。 -
串口WIFI模块
2011-12-12 12:13:51串口WIFI模块 WIFI模块 TTL电平转无线WIFI,九汉科技 WIFI模块。让串口设备无线连接到网络上, -
wifi模块软件
2014-06-13 12:08:19WIFI模块网络搜索软件,用于单片机wifi功能开发 -
51单片机连接ESP8266串口WiFi模块
2017-01-18 15:53:573.3V (5V连接时间过长可能会烧坏WiFi模块) GND GND CH_PD 3.3V GPIO0 GND UTXD TXD URXD RXD 烧录固件 打开烧录软件,选择配置选项卡,点击第二栏的小齿轮图标 - 加载固件地址 点击其他... -
WiFi模块种类三:蓝牙WiFi二合一多功能一体WiFi模块
2018-06-02 13:07:37前面两节介绍了单WiFi功能的单/双频WiFi模块,有时候由于应用设计需要有蓝牙功能,但是如果wifi和蓝牙功能独立分开设计,需要占用比较多的设计空间,在高集成度的设计中,就有了蓝牙和WiFi功能一体的模块,方便集成... -
ac双频WiFi模块,3x3 MIMO AP WiFi模块SKW93A规格书文档.pdf
2019-10-19 15:10:14SKW93A是一款集成MT7628A,MT7610E双芯片的ac AP/Router双频WiFi模块,具备高性能,高集成的无线AP解决方案模块!SKW93A内置580M双内核,对于消费电子设备,该模块仅需要外部3.3V电源。 SKW93A符合802.11a/b/g/n/ac... -
WiFi模块种类二:单WiFi功能双频WiFi模块
2018-05-28 15:23:41双频就是工作频段在ISM2.4G和ISM5G,基本的应用都是不能同时双频率;针对ISM5G频段,有IEEE 802.11a和IEEE 802.11ac标准区别,11ac标准的单通道带款可高达433Mbps,而11a单通道仍然是150Mbps... 既然是双频WiFi模块,... -
AP类WiFi模块系列一:核心板式AP类WiFi模块
2018-01-23 10:38:27WiFi模块主要有网卡类和AP类两大类。 网卡类WiFi模块通信接口、通信信道、综合功能可以大体分成八大类;AP类的WiFi模块可以分为核心板式AP类WiFi模块(核心板方式,只引出接口pin脚)和主板式AP类WiFi模块(也就是不... -
单片机控制WIFI模块
2018-12-05 19:50:24本人工作实践中写的源代码,注释比较仔细,用于单片机控制WIFI模块的通信
-
Binary Editor162.7z
-
SubstancePainter插件开发-基础入门
-
Unity游戏开发之数字华容道
-
壹伴小插件7.3.3.crx
-
Redis(三)
-
Laya 2.0 开发3D小游戏 入门教学
-
XXX功能需要处理10万的并发
-
【2021】Python3+Selenium3自动化测试(不含框架)
-
sort()函数的使用
-
FFmpeg4.3系列之26:视频监控之H265多路摄像头播控项目实战
-
FFmpeg4.3黄金系列课程:c++版
-
Redis笔记.md
-
计算机网络基础
-
C语言实验报告一.pdf
-
stm32f103_wifi实验.zip
-
剑指 Offer 64. 求1+2+…+n
-
【数据分析实战训练营】Hive详解
-
pyechart数据可视化
-
Vue仿Bibibili首页
-
illumina广告genomic-selection-in-agriculture.pdf