wifi 订阅
Wi-Fi(发音: /ˈwaɪfaɪ/,法语发音:/wifi/),在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关,也常有人把Wi-Fi当做IEEE 802.11标准的同义术语。“Wi-Fi”常被写成“WiFi”或“Wifi”,但是它们并没有被Wi-Fi联盟认可。并不是每样匹配IEEE 802.11的产品都申请Wi-Fi联盟的认证,相对地缺少Wi-Fi认证的产品并不一定意味着不兼容Wi-Fi设备。IEEE 802.11的设备已安装在市面上的许多产品,如:个人计算机、游戏机、MP3播放器、智能手机、平板电脑、打印机、笔记本电脑以及其他可以无线上网的周边设备。Wi-Fi联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance(WECA)。在2002年10月,正式改名为Wi-Fi Alliance。 展开全文
Wi-Fi(发音: /ˈwaɪfaɪ/,法语发音:/wifi/),在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关,也常有人把Wi-Fi当做IEEE 802.11标准的同义术语。“Wi-Fi”常被写成“WiFi”或“Wifi”,但是它们并没有被Wi-Fi联盟认可。并不是每样匹配IEEE 802.11的产品都申请Wi-Fi联盟的认证,相对地缺少Wi-Fi认证的产品并不一定意味着不兼容Wi-Fi设备。IEEE 802.11的设备已安装在市面上的许多产品,如:个人计算机、游戏机、MP3播放器、智能手机、平板电脑、打印机、笔记本电脑以及其他可以无线上网的周边设备。Wi-Fi联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance(WECA)。在2002年10月,正式改名为Wi-Fi Alliance。
信息
外语缩写
Wi-Fi
作    用
将电子终端以无线方式互相连接
网络语
歪坏
中文名
无线上网 [1]
其他称呼
无线宽带、无线网
改名时间
2002年10月
Wi-Fi名字由来
Wi-Fi这个术语被人们普遍误以为是指无线保真(Wireless Fidelity),并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词,Wi-Fi还出现在ITAA的一个论文中。但事实上,Wi-Fi一词没有任何意义,也是没有全写的。 [2] 
收起全文
精华内容
下载资源
问答
  • wifi

    千次阅读 2012-07-18 20:58:16
    Wifi 网卡状态 1. WIFI_STATE_DISABLED: WIFI网卡不可用 2. WIFI_STATE_DISABLING: WIFI正在关闭 3. WIFI_STATE_ENABLED:WIFI网卡可用 4. WIFI_STATE_ENABLING:WIFI网卡正在打开 5. WIFI_STATE_UNKNOWN:未知...

    Wifi 网卡状态

    1. WIFI_STATE_DISABLED: WIFI网卡不可用

    2. WIFI_STATE_DISABLING: WIFI正在关闭

    3. WIFI_STATE_ENABLED:WIFI网卡可用

    4. WIFI_STATE_ENABLING:WIFI网卡正在打开

    5. WIFI_STATE_UNKNOWN:未知网卡状态

    WIFI 访问网络需要的权限

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE">

    </uses-permission>修改网络状态的权限

    <uses-permission

    android:name="android.permission.CHANGE_WIFI_STATE">

    </uses-permission>修改WIFI状态的权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">

    </uses-permission>访问网络权限

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">

    </uses-permission>访问WIFI权限

    WIFI 核心模块

    n WifiService

    由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及跟新WIFI的状态

    n WifiMonitor

    负责从wpa_supplicant接收事件通知

    n Wpa_supplicant

    1、读取配置文件

    2、初始化配置参数,驱动函数

    3、让驱动scan当前所有的bssid

    4、检查扫描的参数是否和用户设置的想否

    5、如果相符,通知驱动进行权限 认证操作

    6、连上AP

    n Wifi驱动模块

    厂商提供的source,主要进行load firmware和kernel的wireless进行通信

    n Wifi电源管理模块

    主要控制硬件的GPIO和上下电,让CPU和Wifi模组之间通过sdio接口通信

    Wifi工作步骤

    n Wifi模块初期化

    n Wifi启动

    n 查找热点(AP)

    n 配置AP

    n 配置AP参数

    n Wifi连接

    n IP地址配置

    Wifi模块代码总结

    n Wifi Application代码

    packages/apps/Settings/src/com/android/settings/wifi

    n Wifi Framework

    frameworks/base/wifi/java/android/net/wifi

    frameworks/base/services/java/com/android/server

    n Wifi JNI

    frameworks/base/core/jni/android_net_wifi_Wifi.cpp

    n Wifi Hardware

    hardware/libhardware_legacy/wifi/wifi.c

    n Wifi tool

    external/wpa_supplicant

    n Wifi kernel

    net/wireless drivers/wlan_sd8688 arch/arm/mach-pxa/wlan_pm.c

    Wifi模块的初始化:

    在 SystemServer 启动的时候,会生成一个ConnectivityService 的实例, ConnectivityService 的构造函数会创建WifiService,WifiStateTracker 会创建WifiMonitor 接收来自底层的事件,WifiService 和WifiMonitor 是整个模块的核心。WifiService 负责启动关闭wpa_supplicant、启动关闭WifiMonitor 监视线程和把命令下发给wpa_supplicant,而WifiMonitor 则负责从wpa_supplicant 接收事件通知。

    Wifi模块的启动:

    WirelessSettings 在初始化的时候配置了由WifiEnabler 来处理Wifi 按钮,

    当用户按下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 中的监视线程。

    查找热点(AP):

    (Wifi开启)中讲到Wifi模块开启后会对外发送WIFI_STATE_CHANGED_ACTION。WifiLayer中注册了Action的Receiver。当WifiLayer收到此Action后开始scan的流程,具体如下

    当wpa_supplicant 处理完SCAN 命令后,它会向控制通道发送事件通知扫描完成,从wifi_wait_for_event 函数会接收到该事件,由此WifiMonitor 中的MonitorThread 会被执行来出来这个事件:

    配置 AP 参数:

    当用户在 WifiSettings 界面上选择了一个AP 后,会显示配置AP 参数的一个对话框:

    Wifi连接:

    IP地址的配置:

    展开全文
  • 2 相关工具及原理介绍2.1 硬件介绍——ESP8266WIFI模块ESP8266 系列模组是安信可(Ai-thinker)公司采用乐鑫ESP8266芯片开发的一系列wifi 模组模块。其硬件图如下: 图1 ESP8266硬件图2.1.1 ESP8266WIFI模块的...
    此为原创,若转载请付链接并注明
    相关工具及原理介绍

    2.1 硬件介绍——ESP8266WIFI模块
    ESP8266 系列模组是安信可(Ai-thinker)公司采用乐鑫ESP8266芯片开发的一系列wifi 模组模块

    2.1.1 ESP8266WIFI模块的主要功能
    ESP8266可以实现的主要功能包括:串口透传,PWM调控,GPIO控制。(1)串口透传:数据传输,传输的可靠性好,最大的传输速率为:460800bps。(2)PWM 调控:灯光调节,三色LED调节,电机调速等。(3)GPIO控制:控制开关,继电器等。

    2.1.2 ESP8266WIFI模块的工作模式ESP8266模块支持STA、AP、STA+AP 三种工作模式。
    (1)STA模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联 网实现对设备的远程控制。
    (2)AP模式:ESP8266模块作为热点,实现手机或电脑直接与模块通信, 实现局域网无线控制。
    (3)STA+AP模式:两种模式的共存模式,即可以通过互联网控制可实现无 缝切换,方便操作。

    2.2 NODEMCU
    NodeMCU是一个开源的物联网平台。它使用Lua脚本语言编程。该平台基于eLua 开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目,例如 lua-cjson, spiffs. NodeMCU包含了可以运行在 esp8266、Wi-Fi、SoC芯片之上的固件,以及基于ESP-12模组的硬件。

    2.3 WI-FI杀手
    WI-FI杀手主要利用取消身份验证洪水攻击,取消身份验证洪水攻击的原理是一个 AP 连接了路由器在正常访问网络,这个时候 Hacker 利用自己电脑或者其他设备进行伪造取消身份认证的报文,路由器就会以为是 客户端发过来的需要和客户端断开连接,已经连接的设备会自动断开。

    在这里插入图片描述
    WI-FI杀手的详细工作流程如下。
    (1)客户端的连接这个 WiFi 发送认证请求,AP收到然后给与客户认证响 应;
    (2)客户端再发送认证请求,AP 再发送认证响应客户端传输数据给 AP;
    (3)此时攻击者发送取消身份认证,客户端还是在发送数据,结果 AP Blocked(本意是此路不通)不接受客户端的数据;
    (4)AP 就发送取消身份认证,客户端就断开连接了(攻击者让 AP 误以为 是客户端发送的解除认证,AP 就发送解除认证给客户端从而解除认证了),如果攻击者不停止攻击的话你怎么连接都连接不上去的。

    2.4 WI-FI钓鱼
    所谓WiFi钓鱼就是一个假的无线热点,当你的无线设备连接上去时,会被对方反扫描,对方可以知道你的手机型号、品牌型号等。如果这时你的手机正好连在什么网站上进行了数据通信,且涉及到了用户名、密码等数据,对方就会获得你的用户名和密码。WiFi钓鱼通常会与挂马结合,挂马可以实现网页跳转,其攻击流程如下。
    (1)用户连接WiFi01,因攻击者发起取消身份验证洪水攻击(详情见WiFi 杀手章节)而无法连接WiFi01;
    (2)攻击者伪造与wiFi01名称相同的WiFi02;
    (3)当用户连接WiFi02时,利用挂马实现网页跳转(一般是跳转到需要用 户需要输入密码的界面);
    (4)用户输入WiFi密码,攻击者获得相应密码;
    (5)攻击者取消取消身份验证洪水攻击,用户误以为登录WiFi02成功(其 实是登录了WiFi01),继续上网;
    (6)攻击者神不知鬼不觉获取密码;

    烧录固件流程

    查看连接串口
    将自己的esp8266插到电脑上,确定连接没问题的话打开设备管理器看下自己的串口是多少。
    Alt
    烧录流程
    首先,打开烧录软件ESP8266Flasher,并选择好COM端口。
    在这里插入图片描述
    其次,选择config选项卡,点击小齿轮,并将写好并封装了的固件导入。
    在这里插入图片描述
    然后,选择operation选项卡,点击“fLash”,将固件写入硬件(由于硬件已经烧录了一个固件,所以下面截图是最开始烧录截图)。
    在这里插入图片描述
    在这里插入图片描述
    最后,查看是否烧录成功。
    在这里插入图片描述

    结合软件实现WIFI杀手

    首先,连接模块生成的wi-fi(注意是ESP8266生成的WIF热点)
    其次,打开WI-FI杀手软件(后面链接压缩包里面有,手机安装即可),并点击扫描,查看周围存在的其他AP点。
    在这里插入图片描述
    其次,选择“男103”,点击“攻击选项”将所选的AP克隆到列表,点击Deauth攻击。此时硬件蓝灯常亮,而被攻击的AP点无法再让用户进行连接。
    在这里插入图片描述

    实现WIFI钓鱼

    首先,连接上生成的wifi

    其次在浏览器中入“192.168.0.1/backdoor.html”进入后台,选择要攻击的目标(宿舍WI-FI“男103”)。
    在这里插入图片描述
    其次,选择“通用型”和攻击目标的WI-FI编号,点击“确定”进行攻击。此时硬件蓝灯常亮,被攻击的AP点无法允许用户进行连接,并生成一个名称一样的钓鱼AP点,若电脑开启自动连接WI-FI,则会自动连接到钓鱼AP。

    然后,其会跳到一个钓鱼网站,这个网页看起来非常的正式,会让你误以为是你的路由器需要升级,当你输入了密码后,其密码其实传给了攻击方。
    在这里插入图片描述
    最后,攻击者重新进入后台页面即可查看收到的密码。

    相应的PDF文档(里面有个百度网盘链接可获得文档、固件等所有相关文件),可以查看链接: 点我. 原创不易,生活所迫,非常便宜,就2元,原谅我,我太穷了!!!若有积分的也可以点击文尾的链接,积分下载,或者留下你的邮箱,但科研比较忙,所以回的可能会比较慢。

    关于相关固件以及生成wifi密码我都打包成一个压缩包通过( 固件和完整实验报告链接.)可下载。该压缩包中还有完整课程设计报告!!!!!(可以参考,最好在最后写个参考文献加上一下)

    注意!!!!!!这个文件下载后,也许是个txt文件,你需要改下后缀名为.rar。直接重命名改后缀名即可,给你们带来的不便请见谅。

    有任何问题可以留言,若没积分的,可以和我联系,我通过邮箱发给你相关固件!!!

    展开全文
  • Mac连上WIFI但是无法上网的3种解决方案

    万次阅读 多人点赞 2018-04-17 11:09:33
    一般我们最先会认为是DNS问题,你可以试下用ip访问一个服务器(网站)看下行不行,如果...WiFi—&gt;高级—&gt;WiFi—&gt;删除首选网络框内的所有网络—&gt;点击好—&gt;点击应用;  2、还是...

    一般我们最先会认为是DNS问题,你可以试下用ip访问一个服务器(网站)看下行不行,如果也不行那就应该不是DNS的问题了。或者改变一下DNS,如114,或者自己内网要求的DNS。

    经过上述尝试还是不行的话,就试按如下方法操作:

    1、打开系统偏好设置—>网络—>WiFi—>高级—>WiFi—>删除首选网络框内的所有网络—>点击好—>点击应用; 

    2、还是在网络页面先,在边框有WiFi、蓝牙PAN、网桥等,选中WiFi,点击下面的减号删除WiFi,点击应用; 

    3、再次在系统偏好设置中打开网络页面,在左边框的下方点击加号,接口选择WiFi,服务名称随便写,点击创建,然后点击打开WiFi,链接你的WiFi。应该可以上网了。亲测可行。

    4、Finder—>xxx的Mac—>Macintosh HD—>资源库–>Preferences—>SystemConfiguration—>找到NerworkInterfaces.plist文件并删除; 

    如果找不到xxx的Mac或者Macintosh HD,则在finder页面按command+, 进入如下页面,选择“边栏”,把自己的mac或者macbook打上勾。然后在finder左侧就可以看到相关的了。

    如果还是不行——还有最后的终极大招command+option+p+r,开机时按住,听到3声以上声响(屏幕闪烁3下)后松开。这个方法就是完全重置你电脑的控制器了,会将设置都恢复初始化,但是不影响硬盘数据,不必备份。很多时候macbook出现莫名其妙的问题都用得上。

     

     

     

     

    展开全文
  • ESP8266 WIFI串口通信模块应该是使用最广泛的一种WIFI模块之一了。为什么呢? 因为ESP8266模块是一款高性能的WIFI串口模块,可以不用知道太多WIFI相关知识就可以很好的上手。说白了,只是个WIFI转串口的设备,你...

    物联网,万物互联。这里涉及到的最基本的东西就是如何将所有的物联网设备连接在一起。最简单、最广泛使用的就是互联网。

    ESP8266 WIFI串口通信模块应该是使用最广泛的一种WIFI模块之一了。为什么呢?

    因为ESP8266模块是一款高性能的WIFI串口模块,可以不用知道太多WIFI相关知识就可以很好的上手。说白了,只是个WIFI转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。

    但是就是这么一个很常见的模块,网上很多的博客写的都是错的,或者都是很不详细的。

     

    模块名称:ESP8266 WIFI串口通信模块

    参考资料:ESP8266 WIFI串口通信模块官方资源ATK-ESP8266资源包(提取码: nhsh)

    知识储备:【STM32】串口通信基本原理(超基础、详细版)

    其他模块:USB转TTL模块

    项目下载链接:见本文文末

     

    WIFI模块的调试

    准备工作

    USB转TTL模块与ESP8266 WIFI模块的接线:

    现在市面上使用比较的ESP8266有两个版本,分别是官方的ESP8266(两排8引脚)、ATK-ESP8266(一排6引脚)。其实并没有太大的区别,只是将其中的一些引脚进行额外布局而已。

    如果是官方的ESP8266模块,接线方式如下:

    如果是ATK-ESP8266(正点原子)模块,接线方式如下:

    这六个引脚只需要4个就行了:RXD、TXD、GND、VCC,分别和USB转TTL模块的TXD、RXD、GND、VCC相连接就行了。

    需要注意两点:

    1、ESP8266的RXD(数据的接收端)需要连接USB转TTL模块的TXD,TXD(数据的发送端)需要连接USB转TTL模块的RXD,这是基本的;

    2、关于VCC的选取,在USB转TTL模块上有3.3V和5V两个引脚可以作为VCC,但是一般选取5V作为VCC。如果选取3.3V,可能会因为供电不足而引起不断的重启,从而不停的复位。

    AT指令

    在使用USB转TTL模块与电脑连接之后,就可以使用串口调试助手进行WIFI模块的调试了。首先有一点,AT指令不区分大小写,均以回车、换行结尾。下面介绍常用的AT指令:

    常用AT指令
    指令名 响应 含义
    AT OK 测试指令
    AT+CWMODE=<mode> OK 设置应用模式(需重启生效)
    AT+CWMODE? +CWMODE:<mode> 获得当前应用模式
    AT+CWLAP +CWLAP:<ecn>,<ssid>,<rssi> 返回目前的AP列表
    AT+CWJAP=<ssid>,<pwd> OK 加入某一AP
    AT+CWJAP? +CWJAP:<ssid> 返回当前加入的AP
    AT+CWQAP OK 退出当前加入的AP
    AT+CIPSTART=<type>,<addr>,<port> OK 建立TCP/UDP连接
    AT+CIPMUX=<mode> OK 是否启用多连接
    AT+CIPSEND=<param> OK 发送数据
    AT+CIPMODE=<mode> OK 是否进入透传模式

    需要补充几点:

    1、ESP8266的应用模式:ESP266支撑单AP模式、单STA模式和混合模式。简单的来说就是:

    • AP:可以将ESP8266作为热点,可以让其他的设备连接上它;
    • STA:可以连接上当前环境下的WIFI热点。

    2、什么是透传模式?

    透传就是指不需要关心wifi协议是如何实现的。所需要做的就是A通过串口发数据,B通过串口收数据,整个过程中A串口和B串口就像是用导线直接连接起来了一样。则对于开发人员来看,就是完全透明的。

    更简单地理解就是:

    如果不开启透传模式,我们怎么发送数据呢?在每次发送数据前都必须先发送指令AT+CIPSEND=<param>,例如:

    AT+CIPSEND=4
    
    OK
    >                //在 > 后面输入要上传的数据

    但是一旦开启了透传模式,我们就不需要在每次发送数据前都发送指令AT+CIPSEND=<param>了,只需要发送一次AT+CIPSEND,之后发送的所有内容全部当成是数据了!

    但是这也存在一个问题,要是我后来又想发送命令了,但是却也当成是数据发送过去了。这可怎么办?

    这就要退出透传模式了。怎么退出,发送数据"+++"就可以了。注意:此时“+++”后面,不接“发送新行”!

     

    WIFI模块的使用

    ESP8266的一般使用顺序

    这里的“一般”指的是:ESP8266连接当前环境的热点,与服务器建立TCP连接,传输数据。

    1. AT+CWMODE=1:设置工作模式(STA模式)
    2. AT+RST:模块重启(生效工作模式)
    3. AT+CWJAP="111","11111111":连接当前环境的WIFI热点(热点名,密码)
    4. AT+CIPMUX=0:设置单路连接模式
    5. AT+CIPSTART="TCP","xxx.xxx.xxx.xxx",xxxx:建立TCP连接
    6. AT+CIPMODE=1:开启透传模式
    7. AT+CIPSEND:透传模式下,传输数据
    8. +++:退出透传模式

    ESP8266的封装代码

    关于与单片机的引脚连接:ESP8266与USART3(引脚PB10、PB11)连接。

    首先是USART的配置:

    #include "delay.h"
    #include "usart3.h"
    #include "stdarg.h"	 	 
    #include "stdio.h"	 	 
    #include "string.h"	 
    #include "timer.h" 
    
    //串口接收缓存区 	
    u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; 				//接收缓冲,最大USART3_MAX_RECV_LEN个字节.
    u8  USART3_TX_BUF[USART3_MAX_SEND_LEN]; 			//发送缓冲,最大USART3_MAX_SEND_LEN字节
    
    //通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.
    //如果2个字符接收间隔超过10ms,则认为不是1次连续数据.也就是超过10ms没有接收到
    //任何数据,则表示此次接收完毕.
    //接收到的数据状态
    //[15]:0,没有接收到数据;1,接收到了一批数据.
    //[14:0]:接收到的数据长度
    vu16 USART3_RX_STA=0;   	
    
    
    void USART3_IRQHandler(void)
    {
    	u8 res;	      
    	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
    	{	 
    		res =USART_ReceiveData(USART3);		 
    		if((USART3_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据
    		{ 
    			if(USART3_RX_STA<USART3_MAX_RECV_LEN)	//还可以接收数据
    			{
    				TIM_SetCounter(TIM7,0);//计数器清空          				//计数器清空
    				if(USART3_RX_STA==0) 				//使能定时器7的中断 
    				{
    					TIM_Cmd(TIM7,ENABLE);//使能定时器7
    				}
    				USART3_RX_BUF[USART3_RX_STA++]=res;	//记录接收到的值	 
    			}else 
    			{
    				USART3_RX_STA|=1<<15;				//强制标记接收完成
    			} 
    		}
    	}  				 											 
    }   
    
    
    //初始化IO 串口3
    //pclk1:PCLK1时钟频率(Mhz)
    //bound:波特率	  
    void usart3_init(u32 bound)
    {  
    
    	NVIC_InitTypeDef NVIC_InitStructure;
    	GPIO_InitTypeDef GPIO_InitStructure;
    	USART_InitTypeDef USART_InitStructure;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	// GPIOB时钟
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口3时钟使能
    
     	USART_DeInit(USART3);  //复位串口3
    		 //USART3_TX   PB10
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
      GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB10
       
        //USART3_RX	  PB11
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
      GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PB11
    	
    	USART_InitStructure.USART_BaudRate = bound;//波特率一般设置为9600;
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
    	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
    	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式
      
    	USART_Init(USART3, &USART_InitStructure); //初始化串口	3
      
    
    	USART_Cmd(USART3, ENABLE);                    //使能串口 
    	
    	//使能接收中断
      USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启中断   
    	
    	//设置中断优先级
    	NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
    	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
    	
    	
    	TIM7_Int_Init(1000-1,7200-1);		//10ms中断
    	USART3_RX_STA=0;		//清零
    	TIM_Cmd(TIM7,DISABLE);			//关闭定时器7
    
    }
    
    //串口3,printf 函数
    //确保一次发送数据不超过USART3_MAX_SEND_LEN字节
    void u3_printf(char* fmt,...)  
    {  
    	u16 i,j; 
    	va_list ap; 
    	va_start(ap,fmt);
    	vsprintf((char*)USART3_TX_BUF,fmt,ap);
    	va_end(ap);
    	i=strlen((const char*)USART3_TX_BUF);		//此次发送数据的长度
    	for(j=0;j<i;j++)							//循环发送数据
    	{
    	  while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   
    		USART_SendData(USART3,USART3_TX_BUF[j]); 
    	} 
    }

    由于在USART3中是通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据,而10ms怎么定呢?通过定时器来的,所以我们需要开启定时器:

    #include "timer.h"
    
    extern vu16 USART3_RX_STA;
    
    //定时器7中断服务程序		    
    void TIM7_IRQHandler(void)
    { 	
    	if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)//是更新中断
    	{	 			   
    		USART3_RX_STA|=1<<15;	//标记接收完成
    		TIM_ClearITPendingBit(TIM7, TIM_IT_Update  );  //清除TIM7更新中断标志    
    		TIM_Cmd(TIM7, DISABLE);  //关闭TIM7 
    	}	    
    }
     
    //通用定时器7中断初始化,这里时钟选择为APB1的2倍
    //arr:自动重装值 psc:时钟预分频数
    //定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
    //Ft=定时器工作频率,单位:Mhz 
    //通用定时器中断初始化 
    void TIM7_Int_Init(u16 arr,u16 psc)
    {	
    	NVIC_InitTypeDef NVIC_InitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);//TIM7时钟使能    
    	
    	//定时器TIM7初始化
    	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
    	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
    	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    	TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
     
    	TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE ); //使能指定的TIM7中断,允许更新中断
    	
    	TIM_Cmd(TIM7,ENABLE);//开启定时器7
    	
    	NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;		//子优先级2
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
    	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
    	
    }

    这两个都完成了之后,就可以向ESP8266传输数据了:

    #include "esp8266.h"
    #include "string.h"
    #include "usart.h"
    #include "usart3.h"
    #include "stm32f10x.h"
    #include "sys.h" 
    #include "delay.h"
    
    //ESP8266模块和PC进入透传模式
    void esp8266_start_trans(void)
    {
    	//设置工作模式 1:station模式   2:AP模式  3:兼容 AP+station模式
    	esp8266_send_cmd("AT+CWMODE=1","OK",50);
    	
    	//让Wifi模块重启的命令
    	esp8266_send_cmd("AT+RST","ready",20);
    	
    	delay_ms(1000);         //延时3S等待重启成功
    	delay_ms(1000);
    	delay_ms(1000);
    	delay_ms(1000);
    	
    	//让模块连接上自己的路由
    	while(esp8266_send_cmd("AT+CWJAP=\"111\",\"11111111\"","WIFI GOT IP",600));
    	
    	//=0:单路连接模式     =1:多路连接模式
    	esp8266_send_cmd("AT+CIPMUX=0","OK",20);
    	
    	//建立TCP连接  这四项分别代表了 要连接的ID号0~4   连接类型  远程服务器IP地址   远程服务器端口号
    	while(esp8266_send_cmd("AT+CIPSTART=\"TCP\",\"xxx.xxx.xxx.xxx\",xxxx","CONNECT",200));
    	
    	//是否开启透传模式  0:表示关闭 1:表示开启透传
    	esp8266_send_cmd("AT+CIPMODE=1","OK",200);
    	
    	//透传模式下 开始发送数据的指令 这个指令之后就可以直接发数据了
    	esp8266_send_cmd("AT+CIPSEND","OK",50);
    }
    
    //ESP8266退出透传模式   返回值:0,退出成功;1,退出失败
    //配置wifi模块,通过想wifi模块连续发送3个+(每个+号之间 超过10ms,这样认为是连续三次发送+)
    u8 esp8266_quit_trans(void)
    {
    	u8 result=1;
    	u3_printf("+++");
    	delay_ms(1000);					//等待500ms太少 要1000ms才可以退出
    	result=esp8266_send_cmd("AT","OK",20);//退出透传判断.
    	if(result)
    		printf("quit_trans failed!");
    	else
    		printf("quit_trans success!");
    	return result;
    }
    
    
    //向ESP8266发送命令
    //cmd:发送的命令字符串;ack:期待的应答结果,如果为空,则表示不需要等待应答;waittime:等待时间(单位:10ms)
    //返回值:0,发送成功(得到了期待的应答结果);1,发送失败
    u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
    {
    	u8 res=0; 
    	USART3_RX_STA=0;
    	u3_printf("%s\r\n",cmd);	//发送命令
    	if(ack&&waittime)		//需要等待应答
    	{
    		while(--waittime)	//等待倒计时
    		{
    			delay_ms(10);
    			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
    			{
    				if(esp8266_check_cmd(ack))
    				{
    					printf("ack:%s\r\n",(u8*)ack);
    					break;//得到有效数据 
    				}
    					USART3_RX_STA=0;
    			} 
    		}
    		if(waittime==0)res=1; 
    	}
    	return res;
    } 
    
    
    //ESP8266发送命令后,检测接收到的应答
    //str:期待的应答结果
    //返回值:0,没有得到期待的应答结果;其他,期待应答结果的位置(str的位置)
    u8* esp8266_check_cmd(u8 *str)
    {
    	char *strx=0;
    	if(USART3_RX_STA&0X8000)		//接收到一次数据了
    	{ 
    		USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
    		strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
    	} 
    	return (u8*)strx;
    }
    
    //向ESP8266发送数据
    //cmd:发送的命令字符串;waittime:等待时间(单位:10ms)
    //返回值:发送数据后,服务器的返回验证码
    u8* esp8266_send_data(u8 *cmd,u16 waittime)
    {
    	char temp[5];
    	char *ack=temp;
    	USART3_RX_STA=0;
    	u3_printf("%s",cmd);	//发送命令
    	if(waittime)		//需要等待应答
    	{
    		while(--waittime)	//等待倒计时
    		{
    			delay_ms(10);
    			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
    			{
    				USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
    				ack=(char*)USART3_RX_BUF;
    				printf("ack:%s\r\n",(u8*)ack);
    				USART3_RX_STA=0;
    				break;//得到有效数据 
    			} 
    		}
    	}
    	return (u8*)ack;
    } 

    最后是主程序:

    #include "delay.h"
    #include "sys.h"
    #include "usart.h"
    #include "usart3.h"
    #include "esp8266.h"
    #include "string.h"
    #include "timer.h"
     
    /*
    项目的主要内容:STM32配合ESP8266模块与服务器数据交互
    
    ESP8266的连接:USART3(PB10、PB11)
    
    如何判断数据接收完全?
    1、出现了换行符;
    2、如果超过10ms了都没有下一条数据(TIM7来进行10ms的定时)。
    */
    
    
     int main(void)
     {		
    	delay_init();	    	 			//延时函数初始化	  
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 			//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    	uart_init(115200);	 				//串口初始化为115200
    	usart3_init(115200);	 				//串口初始化为115200
    
    	esp8266_start_trans();							//esp8266进行初始化
    	 
    	esp8266_send_data("12",50);
    	 
    	esp8266_quit_trans();
    
     	while(1)
    	{
    		
    	}
     }

    完整项目链接:

    百度云盘链接: https://pan.baidu.com/s/1LKjJL06fHyt1O5p9Jxmbig 提取码: p8yn 

    展开全文
  • 分分钟搞定python破解无线wifi

    万次阅读 多人点赞 2017-09-24 15:00:53
    这几天公司有些忙,老加班,更新的有点晚了。趁着休息 给大家实战一下怎样用 python破解wifi。 ...这次的代码我就不讲解在上篇说过的一些代码逻辑了。...既然要破解wifi,那么连接wifi的模块首先要有的
  • Py之pywifi:Python库之pywifi的简介、安装、使用方法之详细攻略 目录 pywifi的简介 pywifi的安装 pywifi的使用方法 pywifi的简介 pywifi是一个用来搞wifi的模块,哈哈,各种搞wifi。 pywifi 官方...
  • Android WiFi开发 (二)Wifi热点

    万次阅读 热门讨论 2016-03-07 13:08:19
    接着上一篇wifi的扫描连接等,这一篇主要说一下手机开启Wifi热点。 demo的下载地址会在最下面贴出来。 图片: 经测试开启wifi热点(无秘密,wpa安全类型,wpa2安全类型)都可以正常开启并使用。 主要用到的代码...
  • python pywifi 破解wifi密码

    万次阅读 多人点赞 2019-04-16 20:41:02
    pywifi只是用来练手,因为其破解速度太慢,实际使用价值不大。 pywifi的安装 pywifi是一个专门用来破解wifi密码的第三方库,可以在PyPI上面直接搜到 pywifi网页链接 从网页上也可以看到,pywifi的安装非常简单。我...
  • pywifi模块连接WiFi

    千次阅读 2018-11-06 21:47:13
    python连接wifi时可以用pywifi库 安装pywifi: pip install pywifi 连接指定的wifi代码: import pywifi from pywifi import * import time profile = pywifi.Profile() profile.ssid = '1'#wifi名称 profile....
  • 精选30+云产品,助力企业轻松上云!>>> WiFi...
  • 真爱,请置顶或星标 原文:转载自公号菜鸟学Python作者:小...电脑看到隔壁小姐姐的wifi信号满格哇,这让我动了邪念,看有没有办法蹭下网,我第一个想到了高效的Python,尝试看能不能破解隔壁小姐姐的wifi密码~ P...
  • Python破解WIFI密码详细介绍

    万次阅读 多人点赞 2019-03-10 14:16:09
    俗话说“小时偷针,大时偷鸡”,来告诉我们从小要养成良好的行为习惯。但是自从走上程序员这条路以后,学习变得...闲话少说,下面开始详细介绍Python破解WIFI密码过程: 工欲善其事必先利其器: Python提供了一个...
  • wifi钓鱼 强势拿你的wifi密码

    万次阅读 多人点赞 2018-02-24 12:53:00
    钓鱼wifi 首先设一个场景!!! 如何得到一个免费的wifi 有人可能做过抓包跑包的方法或者跑pin码的方法然而这些方法可能会耗去你大量的时间(我曾经跑包花了一天的时间 跑pin码花了一晚上)感觉效率挺低的。。。。。...
  • 通过名称,主动连接wifi,获取附近的wifi,对比附近是否有这个wifi
  • 下面是 Android 开发中 WiFi 的常用配置,如:获取当前 WiFi ,扫描 WiFi 获取列表,连接指定 WiFi ,监听网络变化等等。 下面是效果图: GitHub 下载地址:https://github.com/wuqingsen/WifiDemoWu csdn ...
  • Android WiFi开发 (三)Wifi热点8.0适配

    千次阅读 热门讨论 2018-08-28 16:03:16
    Android 7.0及以前Wifi热点 Android 7.1、8.0Wifi热点 看之前评论发现Android7.1以上的手机开启Wifi热点后不能正常使用,故研究了一下如何解决次问题。 Android 7.0 开启Wifi热点 在Android7.0及以前...
  • 前段时间在开发蓝牙功能,蓝牙功能开发结束之后最近又在开发WiFi功能。WiFi功能也算简单,主需要导入使用苹果系统自带的框架即可,仅仅单纯的获取手机当前连接的WiFi名称,或者获取手机系统显示的WiFi列表,那就so ...
  • 手机wifi速度慢真是很让人苦恼,有什么有效的wifi提速方法吗?当然有啦~绿茶小编今天就为大家带来了提升wifi速度的十大方法,能激活wifi表现,提升无线网络哦,快来看看吧! 十大方法瞬间提升wifi速度:  每当我们...
  • Python破解WiFi密码【pywifi模块】

    万次阅读 2019-02-03 10:55:53
    首先安装要使用的pywifi模块,这个模块不能使用pip install 安装,去pywifi 官方文档下载压缩包,找到\Lib\site-packages路径,将包解压之后复制到这里,双击setup.py就欧克了。 使用: import pywifi import ...
  • 解决问题 解决Win10连接上wifi但是却显示“无Internet,安全” 解决方法 先将wlan先禁用,然后重新启用wlan即可! 大功告成!
  • Python暴力破解wifi密码

    万次阅读 多人点赞 2018-12-06 09:57:02
    今天给大家分享一个使用Python破解WiFi密码的代码,这个代码也是非常简单,这里需要用Python中的pywifi这个库,所以需要在DOS命令下安装这个库,同样使用pip install pywifi,很简单就安装成功了,我用的是Python3,...
  • linux wifi开机自动连接 wifi连接

    千次阅读 2019-08-27 23:58:17
    linux wifi使用 wifi开机自动连接0 引言1 背景2 解决办法3 linux使用wifi模块3.1 wifi模块的选择3.2 安装驱动3.3 wifi连接3.3.1 安装工具3.3.2 启用wifi模块3.3.3 查看可连的wifi3.3.4 连接wifi3.3.5 获取ip地址4 ...
  • WiFi 6E与WiFi7技术特点

    千次阅读 2020-12-19 15:23:13
    WiFi6还没有完全普及,WiFi6E与WiFi7已经开始在规划了。技术的更新换代速度超乎想象。 WiFi的极速传输基于超宽的带宽,而WiFi6E的带宽将新增1200MHz! 增加的带宽可以有更多的非重叠信道、更加干净的频谱、更加高...
  • WiFiWiFi安全类型

    千次阅读 2019-05-14 14:36:59
    代码分析 typedef enum { WIFI_AUTH_OPEN = 0, /**< authenticate mode : open */ WIFI_AUTH_WEP, /**< authenticate mode : WEP */ WIFI_AUTH_WPA_PSK, /**< authe...
  • WiFi通信

    千次阅读 2019-03-23 19:27:49
    1、WiFi技术简介 1)概念:Wifi全称Wireless Fidelity(无线保真),实质上是一种商业认证,具有Wi-Fi认证的产品符合IEEE 802.11无线网络规范,它是当前应用最为广泛的WLAN标准,采用2.4G和5G两个频谱下。WiFi是WLAN...
  • Python —— 破解 wifi 密码

    万次阅读 多人点赞 2019-03-04 11:33:44
    验证pywifi是否安装成功,输入import pywifi,help(pywifi)出现以下信息就证明安装成功了 这里有点注意的地方是有些人命名安装了pywifi,运行的时候却报错,我也试过这样,这里只需要再安装一个comtypes库就行了...
  • WiFiDisplay

    千次阅读 2017-08-30 09:20:22
    1WiFiDisplay简介 1.1WiFiDisplay概述 WiFiDisplay(WFD)是WiFi联盟在已有技术的基础上,为了加速视/音频的传输分享而提出来的一个新概念。WiFi联盟对此成立了一个认证项目:Miracast-- 用来认证一个设备是否...
  • wifi测试

    千次阅读 2018-03-30 19:47:22
    不通过android UI操作,直接命令打开wifi,测试wifi功能,适用于amlogic平台的android O之后的版本。1. hardware/amlogic/wifi/multi_wifi/config/wpa_supplicant.conf 加入:ctrl_interface=/data/misc/wifi/wpa_...
  • 暴力破解WiFi密码python实现pywifi

    千次阅读 2020-02-08 18:16:26
    最近在B站上看到了一个有意思的wifi密码破解,是暴力破解方法,虽然没啥用,不过也能用它来做自动化来对笔记本上的WiFi网卡进行一些管理 认识pywifi模块 import pywifi from pywifi import const #应用一些常量模块 ...
  • python pywifi模块——暴力破解wifi

    千次阅读 多人点赞 2018-12-20 22:34:26
    pywifi模块介绍: pywifi提供了一个跨平台的Python模块,用于操作无线接口 支持Windows和Linux 在python 2.7和3.5下运行 小小的讲解: 1.wifi接口的操作: 这里的接口指我们用来执行wifi操作(例如:扫描,连接,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,025
精华内容 37,210
关键字:

wifi