如何用WiFi实现无线定位

一、WiFi主从模块设置

1. 实验器材

如何用WiFi实现无线定位_第1张图片

2. 实验步骤

     ① 给控制板刷一套空的程序。

如何用WiFi实现无线定位_第2张图片

② 将Esp8266模块连接到Bigfish扩展板上,并将扩展板插到控制板上。

如何用WiFi实现无线定位_第3张图片

③ 在arduino的Seiral Monitor中,输入AT指令集,观察模块的相应应答。

如何用WiFi实现无线定位_第4张图片

3. 常用指令

① 基础AT指令。

如何用WiFi实现无线定位_第5张图片

 ② WiFi功能AT指令。

如何用WiFi实现无线定位_第6张图片

③ TCP/IP 工具箱 AT 命令。

如何用WiFi实现无线定位_第7张图片

二、WiFi定位

1. 实验器材

如何用WiFi实现无线定位_第8张图片

2. 定位算法

     Rssi三点定位算法。

如何用WiFi实现无线定位_第9张图片

3. 实验操作

      ① 使用文末资料中的“ESP8266调试工具”将三个模块设置为AP模式,并记录其NAME,用于存储在程序中,按照下面方法连接ESP8266模块和Basra主控板。

如何用WiFi实现无线定位_第10张图片

      ② 使用“ESP8266调试工具”将与主控板连接的WiFi模块设置为Statino模式,按照下面方法连接ESP8266模块和BigFish主控板,OLED显示屏使用四芯输入排线与BigFish进行连接。

如何用WiFi实现无线定位_第11张图片

③ 将实验例程(ESP8266RSSIPosition.ino)下载到主控板中。

/*------------------------------------------------------------------------------------

  版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

           Distributed under MIT license.See file LICENSE for detail or copy at

           https://opensource.org/licenses/MIT

           by 机器谱 2023-09-12 https://www.robotway.com/

  ------------------------------*/

/*将与主控板相连接的wifi模块使用“esp8266调试工具软件”设置为Station模式

  将其余三个模块设置为AP模式,并记录其NAME,存储在程序中*/

//#define DEBUG

#define ESP_AP_NUMBER 3

#include 

#include 

#include 

#include 

SoftwareSerial myESP(2,3);

RssiPositionComputer myPositionComputer;

Point2D master_point;

LCD_SSD1306 lcd;

char esp_ap_name[ESP_AP_NUMBER][10] = {"ESP826601","ESP826602","ESP826603"};

int   rssi[ESP_AP_NUMBER];

float distance[ESP_AP_NUMBER];

void setup()

{

delay(1000);

Serial.begin(115200);

myESP.begin(9600);

#ifdef DEBUG

Serial.println("begin");

#endif

while(myESP.available()&&myESP.read());

while(!myESP.available())

{

myESP.println("AT");

delay(1000);

}

while(myESP.available()&&myESP.read());

#ifdef DEBUG

Serial.println("Resonse ok");

#endif

lcd.begin();

    lcd.clear();

    lcd.setCursor(30,4);

    lcd.print("Hello, world!");

}

void loop()

{

int n = searchESPAP(esp_ap_name,rssi);

for(int i=0;i=0)

name_string[n] = in_char;

if(n == 8)

{

n = -3;

ap_n = nameToNumber(name_string,name);

if(ap_n != -1)

{

state = 2;

#ifdef DEBUG

Serial.print('\n');

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

#endif

}

else

{

state = 0;

}

}

}

else if(state==2)

{

n++;

if(n>=0)

rssi_string[n] = in_char;

if(n == 2)

{

rs[ap_n] = atof(rssi_string);

state = 0;

search_result_number++;

#ifdef DEBUG

Serial.print('\n');

Serial.print("rssi["+String(ap_n)+"]:");Serial.println(rs[ap_n]);

#endif

}

}

}

return(search_result_number);

}

float rssiToDistance(int rssi)

{

float dis = 0;

dis = pow(10.0,((abs(rssi)-47)/10.0/2.212));

return dis;

}

④ 将不同模块按照三点定位摆放开(在1m×1m的空间内),如下图所示,观察实验效果。

如何用WiFi实现无线定位_第12张图片

如何用WiFi实现无线定位_第13张图片

程序源代码、ESP8266调试工具、ESP8266相关学习资料详见 如何用WiFi实现无线定位

你可能感兴趣的:(开源)