如何用WiFi实现无线定位

一、WiFi主从模块设置

1. 实验器材

2. 实验步骤

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

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

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

3. 常用指令

① 基础AT指令。

 ② WiFi功能AT指令。

③ TCP/IP 工具箱 AT 命令。

二、WiFi定位

1. 实验器材

2. 定位算法

     Rssi三点定位算法。

3. 实验操作

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

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

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

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-09-12 https://www.robotway.com/------------------------------*//*将与主控板相连接的wifi模块使用“esp8266调试工具软件”设置为Station模式将其余三个模块设置为AP模式,并记录其NAME,存储在程序中*///#define DEBUG#define ESP_AP_NUMBER 3#include <SoftwareSerial.h>#include <RssiPositionComputer.h>#include <Wire.h>#include <MultiLCD.h>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 DEBUGSerial.println("begin");#endifwhile(myESP.available()&&myESP.read());while(!myESP.available()){myESP.println("AT");delay(1000);}while(myESP.available()&&myESP.read());#ifdef DEBUGSerial.println("Resonse ok");#endiflcd.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<ESP_AP_NUMBER;i++){distance[i] = rssiToDistance(rssi[i]);Serial.print(distance[i]);Serial.print('\t');}Serial.print(n);Serial.print('\t');if(myPositionComputer.distanceToPoint(distance[0],distance[1],distance[2],&master_point)==true){Serial.print(master_point.x);Serial.print('\t');Serial.print(master_point.y);Serial.print('\t');Serial.println("position okok");lcd.clear();lcd.setCursor(30,2);lcd.printLong(master_point.x*100,FONT_SIZE_LARGE);   //按厘米输出lcd.setCursor(30,5);lcd.printLong(master_point.y*100,FONT_SIZE_LARGE);}else{lcd.clear();lcd.setCursor(30,4);lcd.print("position ERROR!");Serial.println("position ERROR");   }}int nameToNumber(char in[],char name[][10]){for(int i=0;i<3;i++){for(int j=0;j<9;j++){if(in[j] != name[i][j])break;if(j==8)return(i);}}return(-1);}byte searchESPAP(char name[][10], int rs[]){byte search_result_number = 0;int state = 0;int n;int ap_n;char name_string[10];char rssi_string[4];while(myESP.available()&&myESP.read());myESP.println("AT+CWLAP");delay(100);while(myESP.available()&&myESP.read());unsigned long t = millis();while(!myESP.available()){if(millis()-t<3000)delay(5);elsereturn(0);}#ifdef DEBUGSerial.println("received........");#endift = millis();while(myESP.available()||(millis()-t<3000)){if(!myESP.available())continue;char in_char = myESP.read();#ifdef DEBUGSerial.print(in_char);#endifif( (state == 0)&&(in_char=='(') ){state = 1;n = -4;}else if(state == 1){n++;if(n>=0)name_string[n] = in_char;if(n == 8){n = -3;ap_n = nameToNumber(name_string,name);if(ap_n != -1){state = 2;#ifdef DEBUGSerial.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 DEBUGSerial.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的空间内),如下图所示,观察实验效果。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145052.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

构建个人云存储:本地电脑搭建SFTP服务器,开启公网访问,轻松共享与管理个人文件!

本地电脑搭建SFTP服务器&#xff0c;并实现公网访问 文章目录 本地电脑搭建SFTP服务器&#xff0c;并实现公网访问1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内…

正在等待操作系统重新启动。 请重新启动计算机以安装autocad 2024。

正在等待操作系统重新启动。 请重新启动计算机以安装autocad 2024。正在等待操作系统重新启动。 请重新启动计算机以安装autocad 2024。正在等待操作系统重新启动。 请重新启动计算机以安装autocad 2024。正在等待操作系统重新启动。 请重新启动计算机以安装autocad 2024。 Aut…

【sgTileImage】自定义组件:瓦片图拖拽局部加载、实现以鼠标为中心缩放

特性&#xff1a; 支持缩放瓦片图&#xff0c;定义瓦片图初始缩放比例&#xff0c;以鼠标所在位置为中心缩放支持局部拖拽加载 sgTileImage源码 <template><div :class"$options.name"><div class"sg-ctrl"><label>缩放百分比&l…

物联网、工业大数据平台 TDengine 与苍穹地理信息平台完成兼容互认证

当前&#xff0c;在政府、军事、城市规划、自然资源管理等领域&#xff0c;企业对地理信息的需求迅速增加&#xff0c;人们需要更有效地管理和分析地理数据&#xff0c;以进行决策和规划。在此背景下&#xff0c;“GIS 基础平台”应运而生&#xff0c;它通常指的是一个地理信息…

Multisim14.0仿真(二十七)基于UC3842的反激式开关电源的设计及仿真

一、UC3842简介&#xff1a; UC3842为固定频率电流模式PWM控制器。它们是专门为OFF−线和直流到直流转换器应用与最小的外部组件。内部实现的电路包括用于精确占空比控制的修剪振荡器、温度补偿参考、高增益误差放大器、电流传感比较器和理想适合于驱动功率MOSFET的高电流温度极…

idea 如何在命令行快速打开项目

背景 在命令行中从git仓库检出项目&#xff0c;如何在该命令行下快速用idea 打开当前项目&#xff0c;类似vscode 可以通过在项目根目录下执行 code . 快速打开当前项目。 步骤 以macos 为例 vim /usr/local/bin/idea 输入如下内容 #!/bin/sh open -na "IntelliJ IDE…

Node.js 是如何处理请求的

前言&#xff1a;在服务器软件中&#xff0c;如何处理请求是非常核心的问题。不管是底层架构的设计、IO 模型的选择&#xff0c;还是上层的处理都会影响一个服务器的性能&#xff0c;本文介绍 Node.js 在这方面的内容。 TCP 协议的核心概念 要了解服务器的工作原理首先需要了…

Cache系列直播,这次真的来了!

1、要学cache&#xff0c;一大堆一大堆待讨论的问题。例如近期的一些问题&#xff1a; L1、L2、L3 cache的替换策略是怎样的&#xff1f;什么类型的内存永远不会进L3 cache&#xff1f;L3 cache一般都是多大&#xff1f;L3 cache的组织形式一般是怎样的&#xff1f;什么是cache…

干货:数据仓库基础知识(全)

1、什么是数据仓库&#xff1f; 权威定义&#xff1a;数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 1&#xff09;数据仓库是用于支持决策、面向分析型数据处理&#xff1b; 2&#xff09;对多个异构的数据源有效集…

直击2023中国(天津)国际汽车展览会 感受大运新能源的造车实力

作为汽车行业“新风口”&#xff0c;新能源汽车近年来的热度可谓居高不下。目前&#xff0c;各大车企纷纷抢滩新能源汽车赛道&#xff0c;发挥出各自的看家本领抢占更多市场话语权。相比盲目跟风的车企而言&#xff0c;拥有多年造车经验的大运集团&#xff0c;经过科学严谨的战…

vue.draggable拖拽,项目中三个表格互相拖拽的实例操作,前端分页等更多小技巧~

vue.draggable中文文档 - itxst.com官网在这里&#xff0c;感兴趣的小伙伴可以看看。 NPM或yarn安装方式 yarn add vuedraggable npm i -S vuedraggable UMD浏览器直接引用JS方式 <script src"https://www.itxst.com/package/vue/vue.min.js"></script&…

触觉智能 PurPle Pi OH(OpenHarmony)开发板

资料汇总 内容预览 产品介绍 PurPle-Pi OH 规格书​​​​​​ 系统编译 Purple-Pi-OH Linux SDK编译 Purple-Pi-OH OHOS SDK编译 使用手册 Purple-Pi-OH Ubuntu系统使用手册 常见FAQ 常见问题 官网 官网地址 Purple Pi OH介绍 Purple Pi OH作为一款兼容树莓派的开…

什么是跨站请求伪造(CSRF)攻击?如何防止它?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是跨站请求伪造&#xff08;CSRF&#xff09;攻击&#xff1f;⭐ 如何防止CSRF攻击&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦…

Java之多线程的生产者消费者问题的详细解析

3.生产者消费者 3.1生产者和消费者模式概述【应用】 概述 生产者消费者模式是一个十分经典的多线程协作的模式&#xff0c;弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。 所谓生产者消费者问题&#xff0c;实际上主要是包含了两类线程&#xff1a; 一类是生产者…

leetcodetop100(29) K 个一组翻转链表

K 个一组翻转链表 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改…

ACGAN

CGAN通过在生成器和判别器中均使用标签信息进行训练&#xff0c;不仅能产生特定标签的数据&#xff0c;还能够提高生成数据的质量&#xff1b;SGAN&#xff08;Semi-Supervised GAN)通过使判别器/分类器重建标签信息来提高生成数据的质量。既然这两种思路都可以提高生成数据的质…

MySQL-数据库的操作

1、数据库的操作 数据库是指不同的系统&#xff08;比如学生信息管理系统和停车管理系统&#xff09;可以把数据都存储在一个数据库服务器软件中。不同的系统会创建不同的数据库来使用。 1.1显示所有数据库 show databases; 这个是命令行客户端&#xff0c;是以分号为结束的…

领取我的国庆头像

一年一度的国庆节来了,祝大家节日快乐,本文教大家用Python绘制国庆专属头像。 文章目录 一、效果图二、实现代码一、效果图 这是把微信头像和红旗相结合制作出来的效果图:       如需图片和代码进行练习,可到公众号中发送“国庆头像”即可免费获取 二、实现代码 具体实…

Leetcode242. 有效的字母异位词

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 解题思路&#…

第七章 查找 九、B+树

目录 一、定义 二、B树需要满足的条件 三、重要考点 一、定义 1、B树是一种常用的数据结构&#xff0c;用于实现关系型数据库中的索引。 2、其特点是可以在磁盘等外存储器上高效地存储大量数据&#xff0c;并支持快速的查询、插入、删除等操作。 3、B树的结构类似于二叉搜…