STM32-ESP8266WIFI定位

这篇具有很好参考价值的文章主要介绍了STM32-ESP8266WIFI定位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言

最近想用stm32+esp8266做一个仅通过WIFI来定位的小硬件,但找了很多家,比如高德、百度这些都没有面向个人开发者的硬件网络定位接口,但兜兜转转还是找到了一家做物联网定位的叫维智科技,他们的物联网定位平台是这个https://lotboard.newayz.com/,个人开发者注册的话配额还是挺充裕的,特别是免费3的QPS,特别适合我们这些做智能硬件的。
STM32-ESP8266WIFI定位
根据开发手册体验了一下,只需要最少4个WiFi信息或者通过定位模块解析的坐标就可以返回详细的信息了,返回的数据是这样的。

{
    "id": "38efe26e-************************",
    "asset": "d1c09200-9254-11ed-*******************",
    "location": {
        "timestamp": 1673513233302,
        "address": {
            "name": "湖北省武汉市*************************************",
            "context": [
                {
                    "type": "Country",
                    "name": "中国",
                    "code": "CN"
                },
                {
                    "type": "Province",
                    "name": "湖北省",
                    "code": "420000"
                },
                {
                    "type": "City",
                    "name": "武汉市",
                    "code": "420100"
                },
                {
                    "type": "District",
                    "name": "****",
                    "code": "42****"
                },
                {
                    "type": "Township",
                    "name": "****",
                    "code": "42****"
                },
                {
                    "type": "Road",
                    "name": "****"
                },
                {
                    "type": "Building",
                    "name": "*********"
                },
                {
                    "type": "Floor",
                    "name": "*********"
                }
            ],
            "level": 14
        },
        "place": {
            "type": "Food",
            "name": "***********",
            "categories": [
                {
                    "id": 30200,
                    "name": "*****"
                }
            ],
            "distance": {
                "line": 15.863497
            }
        },
        "position": {
            "timestamp": 1673513234166,
            "source": "wifi",
            "point": {
                "longitude": 114.4*******,
                "latitude": 30.5******
            },
            "spatialReference": "gcj02",
            "accuracy": 29
        }
    }
}

可以看到还是挺详细的,配合cjson或者其他第三方json库直接就可以解析得到当前地址和坐标了,对于无定位模块的设备来说简直是个福音(比如ESP8266、ESP32等),这样一下子能做的事情就变得多起来了,话不多说就拿这个平台做个网络定位硬件出来玩玩。

2.前期准备

在开始写之前先去https://lotboard.newayz.com/这里注册个账号。

step 1 在注册界面选择个人版,然后把能填的填了,最下面的推荐人手机号不用填。
STM32-ESP8266WIFI定位
step 2 注册完成后在应用管理-我的应用中申请新应用。
STM32-ESP8266WIFI定位
STM32-ESP8266WIFI定位
可以看到,在免费版下功能还是非常多的,把上面应用名称和描述填写完毕就可以提交申请了,我使用下来审核还是非常快的,基本在十分钟内就可以审核下来,完成这些步骤就可以等待一会,审核通过就可以得到key了,这个是获取定位的前提。
STM32-ESP8266WIFI定位
接着打开设备管理-设备管理点击注册
STM32-ESP8266WIFI定位
只需要填写设备ID(旁边可以随机生成)和设备名称就可以,其它留空。
STM32-ESP8266WIFI定位

3.硬件平台

刚好手头上有一块小熊派开发板,也带了ESP8266模块,就使用这个开发板来开发这个网络定位Demo。
STM32-ESP8266WIFI定位
这个板子板载ST-link,所以不需要额外的烧录器,因为采用WAN接口,WIFI扩展板对着插上就可以,主控是STM32L431RCT6,用来开发这个Demo绰绰有余,废话不多说,直接开始。

4.编程代码

为快速开发使用,这里使用RT-Thread实时操作系统来开发。

step 1 打开RT-Thread Studio进入文件–新建–RT-Thread 项目选择基于芯片在下拉菜单中选择添加更多,并填上相应信息
STM32-ESP8266WIFI定位
step 2 点击完成即可自动生成工程(这个过程算是比较久的,时间不固定,主要根据电脑配置的不同而定)。

工程生成完成后点击头部菜单栏中的STM32-ESP8266WIFI定位开始编译,一般是没什么问题的,然后点击
STM32-ESP8266WIFI定位
这个图标下载即可,打开studio自带的串口助手即可看到shell打印出来的信息
STM32-ESP8266WIFI定位
step 3 接下来开始添加软件包(这个是RT-Thread最大的亮点),首先添加ESP8266的驱动包,在项目资源管理器-你的项目名称-RT-Thread Settings中添加软件包。
STM32-ESP8266WIFI定位
输入

at_device

添加RT-Thread官方移植的AT驱动包
STM32-ESP8266WIFI定位
然后在该界面对着该软件包按右键选择配置项
STM32-ESP8266WIFI定位
找到ESP8266并将其使能STM32-ESP8266WIFI定位
底下WIFI账号和密码就填能够上网的路由器或者热点的,在选择AT客户端设备时,需要将开发板顶端的开关拨到ATMCU档位,然后根据原理图将串口改为LPUSART1。
STM32-ESP8266WIFI定位

项目资源管理器-derives-derives.h文件中添加以下定义。
STM32-ESP8266WIFI定位

#define BSP_USING_LPUART1
#define BSP_LPUART1_TX_PIN       "PC1"
#define BSP_LPUART1_RX_PIN       "PC0"

然后重新编译工程,下载到开发板,在串口返回的信息就可以看到各项数据初始化完成
STM32-ESP8266WIFI定位
再输入ifconfig就可以看到获取到的ip,此时MCU这边已经可以通过ESP8266联网了。

ifconfig

STM32-ESP8266WIFI定位
安装上述方法将cJSON、webclient这两个软件包添加进入即可,其中需要配置的地方是webclient的配置项
STM32-ESP8266WIFI定位
然后在main.c中添加下述代码,在线程中调用该函数即可,之所以直接打出是因为AT_Device软件包没有扫描WIFI的接口,所以只能使用静态的。在RT-Thread的软件包中,维智官方也发布过一款SDK,叫wayz-iot https://github.com/wayz-iot/wayz_iotkit,但是这款SDK使用的是wlan框架,这里使用AT客户端所以没办法使用这个包,但如果手上有AP6181这种模块,可以自己移植wlan框架,然后就可以使用该包了,需要注意的是该包使用的webclient软件包是老版本的,对于新版本需要更改部分参数才可以使用

#include "cJSON.h"
#include <webclient.h>

char * res;

/* HTTP client upload data to server by POST request */
int webclient_post_data(void)
{
    unsigned char *buffer = RT_NULL;
    int length = 0;
    const char *data = "{\r\n    \"timestamp\": 1670494607373,\r\n    "
            "\"id\": \"21ac9d80-76cc-11ed-a08e-b3b116d640e2\",\r\n    "
            "\"asset\": {\r\n        "
            "\"id\": \"21ac9d80-76cc-11ed-a08e-b3b116d640e2\",\r\n        "
            "\"manufacturer\": \"esp8266\",\r\n        "
            "\"model\": \"Note\",\r\n        "
            "\"imeiMd5\": \"234567890\",\r\n        "
            "\"macAddress\": \"18:fe:35:98:d3:7b\",\r\n        "
            "\"uniqueId\": \"xxxxxxxx\",\r\n        "
            "\"os\": {\r\n            "
            "\"type\": \"mcu\",\r\n            "
            "\"version\": \"esp-12f\"\r\n        }\r\n    },\r\n    "
            "\"location\": {\r\n        "
            "\"timestamp\": 1670494607373,\r\n        "
            "\"wifis\": [\r\n            {\r\n                "
            "\"signalStrength\": -69,\r\n                "
            "\"ssid\": \"ChinaNet-UZda\",\r\n                "
            "\"macAddress\": \"bc:f4:5f:a9:68:c4\"\r\n            },\r\n            "
            "{\r\n                "
            "\"signalStrength\": -64,\r\n                "
            "\"ssid\": \"2.4g@myai.tech\",\r\n                "
            "\"macAddress\": \"74:50:4e:8a:de:c8\"\r\n            },\r\n            "
            "{\r\n                "
            "\"signalStrength\": -72,\r\n                "
            "\"ssid\": \"2.4g@myai.tech\",\r\n                "
            "\"macAddress\": \"60:db:15:fa:e9:11\"\r\n            },\r\n            "
            "{\r\n                "
            "\"signalStrength\": -79,\r\n                "
            "\"ssid\": \"W888\",\r\n                "
            "\"macAddress\": \"9e:2b:a6:89:36:32\"\r\n            },\r\n            "
            "{\r\n                "
            "\"signalStrength\": -58,\r\n                "
            "\"ssid\": \"Office\",\r\n                "
            "\"macAddress\": \"9e:2b:a6:99:40:d2\"\r\n            },\r\n            "
            "{\r\n                "
                        "\"signalStrength\": -67,\r\n                "
                        "\"ssid\": \"CU_9SR2\",\r\n                "
                        "\"macAddress\": \"5c:64:7a:32:d3:28\"\r\n            },\r\n            "
            "{\r\n                "
                        "\"signalStrength\": -60,\r\n                "
                        "\"ssid\": \"CU_ryt6\",\r\n                "
                        "\"macAddress\": \"40:67:9b:ad:12:5e\"\r\n            },\r\n            "
            "{\r\n                "
                        "\"signalStrength\": -84,\r\n                "
                        "\"ssid\": \"DIRECT-14-HP M132 LaserJet\",\r\n                "
                        "\"macAddress\": \"b6:b5:b6:5f:63:14\"\r\n            },\r\n            "
            "{\r\n                "
                        "\"signalStrength\": -78,\r\n                "
                        "\"ssid\": \"DIRECT-ca-HP M227f LaserJet\",\r\n                "
                        "\"macAddress\": \"4e:d5:77:69:19:ca\"\r\n            },\r\n            "
            "{\r\n                "
                        "\"signalStrength\": -48,\r\n                "
                        "\"ssid\": \"Z Guest\",\r\n                "
                        "\"macAddress\": \"9e:2b:a6:a9:36:be\"\r\n            },\r\n            "
            "{\r\n                "
            "\"signalStrength\": -59,\r\n                "
            "\"ssid\": \"Z Office\",\r\n                "
            "\"macAddress\": \"9e:2b:a6:99:41:22\"\r\n            }\r\n        ]\r\n    }\r\n}";
    length = webclient_request("http://api.newayz.com/location/hub/v1/track_points?access_key=你应用的key&field_masks=location.position", RT_NULL, data,strlen(data), &buffer,strlen(buffer));
    if (length < 0)
    {
        LOG_E("webclient POST request response data error.");
        return -RT_ERROR;
    }

    LOG_D("webclient POST request response data :");

    //JSON提取值
    cJSON* cjson_test = NULL;
    cJSON * item = NULL;
    cJSON * Plasma = NULL;
    cJSON * Negative = NULL;
    cJSON * Ultraviolet = NULL;
    cjson_test = cJSON_Parse((char *)buffer);
    web_free(buffer);
    if(cjson_test == NULL)
    {
        rt_kprintf("parse fail.\n");

        return;
    }
    item = cJSON_GetObjectItem(cjson_test, "location");
    Plasma = cJSON_GetObjectItem(item, "position");
    rt_kprintf("%s", cJSON_Print(item));
    return RT_EOK;
}

编译后下载到开发板上,可以看到返回的数据(最主要是坐标)

{
    "timestamp": 1674987395158,
    "source": "wifi",
    "point": {
        "longitude": 114.410000,
        "latitude": 30.500000
    },
    "spatialReference": "gcj02",
    "accuracy": 29
}

相应的平台上的监控大屏中的设备监控也会显示定位
STM32-ESP8266WIFI定位
STM32-ESP8266WIFI定位
该平台还有电子围栏,轨迹查询等功能还需要各位自己去慢慢摸索,相应的API手册也很齐全,如果有什么问题欢迎留言,我会尽快回复。文章来源地址https://www.toymoban.com/news/detail-434617.html

到了这里,关于STM32-ESP8266WIFI定位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32训练—WiFi模块】第二篇、STM32驱动ESP8266WiFi模块获取天气

    目录 第一部分、前言 1、获取心知天气API接口 2、硬件准备 第二部分、电脑串口助手调试WIFI模块获取天气 1、ESP8266获取天气的流程 2、具体步骤 第三部分、STM32驱动ESP8266模块获取天气数据 1、天气数据的解析 1.1、什么函数来解析天气数据? 2.1、解析后的数据如何使用?  2、

    2024年02月09日
    浏览(31)
  • 基于stm32 ESP8266WiFi模块的基本通信

    本篇涉及到的模块与工具为: 1. ATK-ESP8266wifi模块 2. USB-UART模块 3. 串口调试助手 提取链接:https://pan.baidu.com/s/17xRlpnjp8j-VvyD2VDxNXw?pwd=ufms 提取码:ufms 4. 网络调试助手 提取链接:https://pan.baidu.com/s/10spxZmwMGI70USlzkOzdxg?pwd=fmxe 提取码:fmxe 程序源码提取连接放置文章底部,需者自提

    2024年02月02日
    浏览(78)
  • STM32通过esp8266连接WiFi接入MQTT服务器

    上文我们讲到如何搭建本地MQTT服务器http://t.csdn.cn/aHNcO,现在介绍如何通过stm32连接MQTT 一.首先我们初始化esp8266这里我们使用的是USART4与其通信代码如下 二.通过数据间隔时间来判断是否是一串数据如果间隔时间大于30ms则判定为不是一串数据,接收缓冲器清零。 代码如下!

    2024年02月07日
    浏览(34)
  • 猿创征文 | 【STM32】ESP8266 wifi模块创建阿里云产品

    📑博客主页:@丘比特惩罚陆 💖欢迎关注:点赞收藏⭐留言✒ 💬系列专栏:嵌入式、web前端、笔记专栏 🎮 加入社区: 灌水乐园 🥇人生格言:选对方向,每走一步都是进步! ✒️欢迎大佬指正,一起学习!一起加油! 👏 希望大家能小手一动,帮忙点个赞! 😁资源邮箱

    2023年04月18日
    浏览(40)
  • STM32+esp8266实现单片机与服务器的WiFi通信

             源码已上传至gitee: stm32: 一些stm32模块使用经验记录 - Gitee.com https://gitee.com/lrf1125962926/stm32/tree/esp8266wifi%E9%80%9A%E4%BF%A1/         本实验采用STM32F1系列+esp8266 01s模块,采用HAL库开发。主控芯片哪个系列和型号都可以,只要有两个串口(UART或者USART,以下统称串口)

    2024年02月07日
    浏览(32)
  • STM32--ESP8266物联网WIFI模块(贝壳物联)--远程无线控制点灯

    本文适用于STM32F103C8T6等MCU,其他MCU可以移植,完整资源见文末链接 一、简介 随着移动物联网的发展,各场景下对于物联控制、数据上传、远程控制的诉求也越来越多,基于此乐鑫科技推出了便宜好用性价比极高的wifi物联模块——ESP8266,话不多少我们先来看看这个神奇的模

    2024年02月08日
    浏览(45)
  • STM32通过串口2使用ESP8266WIFI模块连接新大陆云平台

    目录 使用硬件: 分步骤:配置TCP连接,连接WIFI 1.使用ESP8266的复位引脚进行复位 2.发送基本AT指令 3.连接新大陆 4.新大陆云平台显示在线及上传数据测试成功 5.串口显示 5.涉及的函数 发生AT检测WIFI模块错误,如图,代码运行停留在了.AT,在while中一直循环,没有往下跑了,这种

    2024年04月24日
    浏览(42)
  • STM32f103增加ESP8266模块,通过Wifi用手机TCP服务端远程与STM32通信

    提示:esp8266开启透传模式,连上路由器Wifi(电脑热点),接入STM32串口引脚。另外手机TCP服务端是手机IP地址+串口号(大于8000滴) 最近对ESP8266模块进行小了解,知道只要对8266通过串口发送AT指令进行配置其工作模式,就能够通过手机调试APP创建什么TCP/UDP服务端/客户端和8266进行

    2024年02月16日
    浏览(35)
  • 【STM32】ESP8266 WiFi模块实时上报温湿度及控制LED灯项目笔记

    本项目无线通讯模块使用的是WiFi模块ESP8266,乐鑫公司推出的高性能、低功耗串口WiFi模块ESP8266应该是使用最广泛的一种WIFI模块之一了,它自身带有高性能的MCU(Microcontroller Unit),因此它既可以通过串口连接为外部MCU提供 WiFi通信功能,也就是我们本项目所用到的功能;当然

    2024年01月21日
    浏览(45)
  • STM32玩转物联网实战篇:2.ESP8266 WIFI模块TCP通信示例详解

    开发板功能区分布图 开发板俯视图     ESP8266 WIFI模块内置TCP/IP网络协议,模块支持三种网络模式,AP、STA和AP+STA模式,AP模式:模块作为WIFI热点,等待其他设备的连接,进行局域网的通信,STA模式:模块作为客户端通过路由器连接外网,和服务器进行通信,AP+STA模式:两

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包