ESP8266不需要修改任何库

#include "ESP8266WiFi.h"

#include "math.h"

/*

已知三点位置 (x1, y1,z1), (x2, y2,z2), (x3, y3,z3)

已知未知点 (x, y,z) 到三点距离 d1, d2, d3

以 d1, d2, d3 为半径作三个圆,根据毕达哥拉斯定理,得出交点即未知点的位置计算公式:

( x1 - x0 )2 + ( y1 - y0 )2 = d12

( x2 - x0 )2 + ( y2 - y0 )2 = d22

( x3 - x0 )2 + ( y3 - y0 )2 = d32

设未知点位置为 (x, y), 令其中的第一个球形 P1 的球心坐标为 (0, 0),P2 处于相同纵坐标,球心坐标为 (d, 0),P3 球心坐标为 (i, j),

三个球形半径分别为 r1, r2, r3,z为三球形相交点与水平面高度。则有:

r12 = x2 + y2 + z2

r22 = (x - d)2 + y2 + z2

r32 = (x - i)2 + (y - j)2 + z2

化简

x = (r12 - r22 + d2) / 2d

y = (r12 - r32 - x2 + (x - i)2 + j2) / 2j

*/

//第一个点(不修改) 原点 第一个球形 P1 的球心坐标为 (0, 0)

#define x1 0-----------------------------------------------------

#define y1 0-----------------------------------------------------

#define z1 0 //高度一致------------------------------------------

//第二个点(只修改y2) P2 处于相同纵坐标,球心坐标为 (d, 0)------

float x2 =0 ; //实际位置距离测量 1-20米-------------------------- 修改

float y2 =0 ;//实际位置放在相对原点纵坐标为0 --------------------

float z2 =0 ;//高度一致------------------------------------------

//第三个WIfi距离 (修改x3和y3)

float x3 =0; // 实际位置测量------------------------------------修改

float y3 =0; // 实际位置测量------------------------------------修改

float z3 =0; //高度一致-----------------------------------------

// 物体实际位置

float x=0;

float y=0;

float z=0;

//测量距离

float d1=0;

float d2=0;

float d3=0;

/*

1 单个距离公式

d = 10^((abs(rssi) - A) / (10 * n)) 信号强度

2 参数介绍

d - 计算所得距离(单位:m)

rssi - 接收信号强度

A - 发射端和接收端相隔1米时的信号强度

n - 环境衰减因子

*/

// 3 在自己的环境里实际测试,修改下面两个值适应环境

#define wifiname1 "gps1"

#define A1 -42 //接收机和发射机间隔1m时的信号强度 ssid 一般45-52

#define N1 40 //N = 10 * n ,其中n为环境衰减因子,3.25-4.5 这个没有专门设备无法测到,只能在A数值确定了,修改这个数值,使得输出距离为 1米

#define wifiname2 "gps2"

#define A2 -42 //接收机和发射机间隔1m时的信号强度 ssid 一般45-52

#define N2 40 //N = 10 * n ,其中n为环境衰减因子,3.25-4.5 这个没有专门设备无法测到,只能在A数值确定了,修改这个数值,使得输出距离为 1米

#define wifiname3 "gps3"

#define A3 -42 //接收机和发射机间隔1m时的信号强度 ssid 一般45-52

#define N3 40 //N = 10 * n ,其中n为环境衰减因子,3.25-4.5 这个没有专门设备无法测到,只能在A数值确定了,修改这个数值,使得输出距离为 1米

//信号临界值强大要达到 -65 才参与运算

int rssi_min=-65;

//至少需要 3 个 ap都检测到

int ap_number=0;

int ap_number_min=3;

void setup() {

Serial.begin(115200);

WiFi.mode(WIFI_STA);

WiFi.disconnect();

delay(100);

Serial.println("Setup done");

}

// 获取单个WIfi距离

float Distance(String wifissid,int wifirssi,int A,int N){

if(wifissid=="gps1"){

Serial.print("Wifiname:"); Serial.print(wifissid); Serial.print(" RSSI:"); Serial.print(wifirssi); Serial.print("");

float iu, distance;

iu = (float)(A-wifirssi ) / (float)N;

distance = powf(10.0, iu);//计算以x为底数的y次幂 功能与pow一致,只是输入与输出皆为浮点数

Serial.print(" Distance:"); Serial.print(distance); Serial.println("m");

return distance;

}

}

//获取自身位置 x y坐标

/*

输入参数

float r1 设备距离第一个wifi的距离

float r2 设备距离第二个wifi的距离

float r3 设备距离第三个wifi的距离

float x2, 第一个点为圆心,第二个点同一水平位置随意放,第一个点到第二个点的实际距离

float x3 以第一个点为原点,以第一个和第二个点连线为X轴,垂直其方向为y轴,第三个点x坐标

float y3 以第一个点为原点,以第一个和第二个点连线为X轴,垂直其方向为y轴,第三个点y坐标

*/

//简单算法

void My_xyz(float r1,float r2,float r3,float x2,float x3, float y3){

float x = (float)(r1*r1 - r2*r2 + x2*x2) / (float)2*x2;

float y = (float)(r1*r1 - r3*r3 - x*x + (x - x3)*(x - x3) + y3*y3) / (float)2*y3;

Serial.print("x:"); Serial.print(x);

Serial.print(" y:"); Serial.println(y);

}

void My_2x(){

}

void loop() {

// Serial.println("scan start");

int n = WiFi.scanNetworks();

Serial.println("---------------------WIFI Scan done---------------------");

if (n == 0) {

Serial.println("no networks found");

} else {

ap_number=0;//检测到的数目

d1=0;//第一个距离

d2=0;//第二个距离

d3=0;//第三个距离

for (int i = 0; i < n; ++i) {

// Print SSID and RSSI for each network found

if(WiFi.SSID(i)==wifiname1&&WiFi.RSSI(i)>rssi_min){

d1= Distance(WiFi.SSID(i),WiFi.RSSI(i),A1,N1);ap_number++;

}

if(WiFi.SSID(i)==wifiname2&&WiFi.RSSI(i)>rssi_min){

d2= Distance(WiFi.SSID(i),WiFi.RSSI(i),A2,N2);ap_number++;

}

if(WiFi.SSID(i)==wifiname3&&WiFi.RSSI(i)>rssi_min){

d3= Distance(WiFi.SSID(i),WiFi.RSSI(i),A3,N3);ap_number++;

}

}//for

//----------------------------计算位置--------------------------------

if(ap_number==ap_number_min)

{

My_xyz(d1,d2,d3, x2, x3, y3);

}

else{

Serial.println("AP_number < 3,distance get fail!");

}

}

delay(500);

}

wifi信号衰减与距离关系_(1)WIFI信号确定距离相关推荐

  1. wifi信号衰减与距离关系_有线网络PK无线WiFi,孰胜孰负?

    无线WiFi和有线网络是21世纪人们工作和生活的必需品,二者都有各自的优缺点.要是硬拿二者相提并论,到底谁又能更胜一筹呢?很多用户会觉得肯定是有线好,有线的才会比较稳定比较快,但又觉得无线WiFi更方 ...

  2. wi-fi和路由器怎么连接_解决Wi-Fi问题的最简单方法:严重移动路由器

    wi-fi和路由器怎么连接 Are there Wi-Fi dead zones in your house? Before you do anything drastic, you might be ...

  3. win8连接wifi成功但受限制_免费WiFi那个好用

    免费WiFi哪个好用?如今的WiFi软件网络上太多了,选择一款实用的免费WiFi软件才是主要.下面统一小编给大家推荐三款电脑免费WiFi软件,一起来看看免费WiFi哪个好用吧. 一.参测软件简介 1. ...

  4. wifi卡慢延迟高_家里WiFi特别卡,网络延迟高,可能不是网速的问题

    原标题:家里WiFi特别卡,网络延迟高,可能不是网速的问题 随着科技走向我们的身边,网络的覆盖力度也是越来越大,相信很多人的家中都是有安装WiFi的,然后往往在家中使用的过程中都会碰到这样的情况,明明 ...

  5. 家里wifi网速越来越慢_家里WIFI越用越卡?教你3个小方法,彻底解决网速慢、不稳定等问题...

    相信各位小伙伴都遇到过家里Wi-Fi网络频繁卡顿的现象,当遇到这种情况是大多数人的第一反应就是"有其他人在蹭家里的Wi-Fi",为此便会将自家的Wi-Fi密码改成长串数字+复杂字母 ...

  6. win8连接wifi成功但受限制_连接wifi成功但受限制如何解决 连接wifi成功但受限制解决【步骤】...

    连接wifi成功但受限制的搞定方式一: 我们在wifi信号时,偶尔出现"网络受限",电脑将无法上网,此状况是偶尔出生或是随机出现,那我们该如何搞定呢! 首先是最简单的方式,重新启动 ...

  7. wifi卡慢延迟高_家里WIFI越用越卡?教你3个小方法,彻底解决网速慢、卡顿等问题...

    相信各位小伙伴都遇到过家里Wi-Fi网络频繁卡顿的现象,当遇到这种情况是大多数人的第一反应就是"有其他人在蹭家里的Wi-Fi",为此便会将自家的Wi-Fi密码改成长串数字+复杂字母 ...

  8. 苹果wifi网速慢怎么办_苹果手机WiFi网速慢?这四招让网速无比流畅,只有19.27%的人知道...

    使用iPhone手机的时候,是不是会遇到WiFi网速慢的问题?这时候有什么解决的方法吗?今天就来教你几个好方法,治标又治本!赶紧马起来啦! 1.检查路由器 首先如果在使用WiFi的时候,发现WiFi的 ...

  9. wifi频率和zigbee干扰_防止Wi-Fi和Zigbee共存的干扰方法分享

    Wi-Fi与Zigbee共存设计的基础知识与技巧 Wi-Fi 共存允许多个2.4 GHz 技术(包括 Wi-Fi.Zigbee.Thread 和蓝牙)同时运行,而不会发生来自一个无线电的信号干扰相邻无 ...

  10. 点到曲线的距离公式_推导点到直线的距离公式到底有多少种方法?

    [总结]方程思想,这也是解析几何的主题思想,几何问题代数化,转化为代数计算. 优点:思路简单清晰易于理解. 缺点:计算量较大. [总结]此方法优点:计算量大幅度减小,紧扣问题入手,切入点准确. 缺点: ...

最新文章

  1. centos7挂载nas存储_Geeki说丨浅谈几种存储添加主机映射方式
  2. Spring框架的快速入门
  3. Xml的编码和Bom
  4. 第14次全天课笔记 20181028 集合、时间、类
  5. 【报告分享】全球产业趋势系列研究之人工智能.pdf(附下载链接)
  6. 三条中线分的六个三角形_三角形中的边长和线段(下)
  7. 在jetson tx2上使用pascal VOC0712训练caffe-ssd
  8. android网易云桌面歌词,网易云音乐APP怎么开启桌面歌词功能
  9. dht11 新手原理详解(附代码)
  10. 手把手带你撸一个校园APP(一):项目简介
  11. BK7256,Wi-Fi6音视频soc-combo芯片,上海博通-内置Flash,支持720P
  12. (好文重发)朴英敏:用crash工具分析Linux内核死锁的一次实战
  13. 计算机不显示固态硬盘,新装的固态硬盘不显示怎么办?
  14. XML编程经验――LIBXML2库使用指南
  15. python基础教程:__call__用法
  16. Oracle 存储过程中,解决变量使用 in条件时,查询无效问题
  17. 运筹学基础(名词解释题总结)
  18. python爬虫之常见的加密方式
  19. robots文件的Crawl-delay是什么意思
  20. 资源 步金国 的高手

热门文章

  1. 什么是0day漏洞?
  2. java jdom jar_jdom jar下载_jdom jar官方下载-太平洋下载中心
  3. 板簧的弹性系数如何计算_一种板簧总成的刚度计算方法、系统及可读存储介质与流程...
  4. 从计算机视觉到人脸识别:一文看懂颜色模型、信号与噪声
  5. python revit二次开发_Revit二次开发06
  6. linux安全加固技术--内核安全模块LSM
  7. 如何快速计算出三相电流的数值呢
  8. EasyAR 4.3 Unity云识别
  9. Access2016学习12
  10. 搜狗拼音、QQ拼音输入法、2345拼音输入法、百度输入法 、手心输入法对比。(个人体会)...