1 ESP32到ESP32通过Internet进行通信-德赢Vwin官网 网
×

ESP32到ESP32通过Internet进行通信

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-15

石玉兰

分享资料个

描述

[编辑:2021 年 7 月 9 日] 该项目已得到改进、修复并从 ArduinoIDE 移植到 platformio。以下评论中的问题应该已经修复。

通常连接的项目具有某种 Web 或移动 UI。如果您想通过另一件事来控制一件事,尤其是在低延迟和通过互联网上很难实现。这就是我创建这个项目的原因。这是一个 Arduino 框架模板,向您展示如何通过 Internet 连接两个基于 ESP32 的板,在Wi-Fi 连接断开或连接板之一临时断电的情况下,通过自动恢复功能最大限度地减少延迟很酷的是,如果 ESP32 板在同一个 Wi-Fi 网络中并且如果在不同的网络中,它就可以工作即使在不同的大陆。

 

我们在此处描述的模板可以作为您基于 ESP32 项目的各种酷接口的基础,例如:

  • 智能手套来控制你的遥控车
  • 远程控制您的智能家居设备
  • 到您家的安全和私人 Wi-Fi 密钥(当连接是 P2P 时,没有第 3 方可以访问加密密钥)
  • 一个非常快速的互联网按钮,您的东西

还有很多很多。

模板的默认功能是通过对面 ESP32 板的按钮对 LED 进行双向控制。您还可以将此模板视为摩尔斯电码 Internet 通信器:)。随意替换代码以通过您需要的任何输入/输出操作来控制按钮和 LED。

这个怎么运作

  • ESP32 既充当 HTTP 服务器(基于ESPAsyncWebServer库)又充当 HTTP 客户端(基于AsyncTCP
  • ESP32 自动检测同一 Husarnet VPN 网络中的所有对等点
  • 当按下按钮时,HTTP 请求被发送到所有其他对等点并打开 LED
  • 释放按钮时,向所有其他对等方发送 HTTP 请求并打开 LED

无线网络任务

如果当前连接断开,则写入 Wi-Fi 任务以自动切换到另一个 Wi-Fi 网络。在配置部分,您可以对多个 Wi-Fi 网络凭据进行硬编码 - 这是一种舒适的解决方案,因为如果您在不同位置打开电路板,您无需重新编程它们。

基本上,ESP32 设备之间的虚拟 LAN 网络是通过以下两条线创建的:

Husarnet.join(husarnetJoinCode, hostNameX);
Husarnet.start();

连接也是完全加密、安全和私密的。它不仅可以在 LAN 中工作,还可以通过 Internet 工作,因为连接由Husarnet提供支持- 一个开源 P2P VPN 客户端,它不仅可以在普通计算机上工作,而且可以在 ESP32 微控制器上工作。Husarnet 仅有助于通过 Internet 建立连接,并且其服务器不会转发用户数据。由于延迟较低。

HTTP 服务器

// A dummy web server (see index.html)
server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) {
    request->send(200, "text/html", html);
});
// Send a GET request to /led//state/<0 or 1>
server.on("^\\/led\\/([0-9]+)\\/state\\/([0-9]+)$", HTTP_GET, 
[] (AsyncWebServerRequest *request) {
    String ledNumber = request->pathArg(0); 
    String state = request->pathArg(1);
    digitalWrite(LED_PIN, state.toInt());
    request->send(200, "text/plain", "LED: " + ledNumber + ", with state: " + state);
});

组装

  • 在引脚P0GND之间连接按钮
  • 在引脚27GND之间串联 LED 二极管和电阻
  • 将电池连接到基于 ESP32 的开发板。在项目中,我们使用带有内置 LDO 的 ESP32 devkit。查看基于 ESP32 的电路板的最大输入电压电平以避免损坏。

准备固件

从 GitHub 存储库克隆项目并按照以下步骤操作:

1.打开项目

  • 从安装了 Platformio 扩展的 Visual Studio Code 打开项目文件夹

2. 配置你的项目(ESP32-to-ESP32.ino 文件)

  • 获取您的 Husarnet VPN 加入代码(允许您将设备连接到同一个 VPN 网络)

您将在https://app.husarnet.com
找到您的加入代码-> 单击所需的网络
->
按钮->选项卡Add element
Join Code

  • 将您的 Husarnet 加入代码放在这里:
const char *husarnetJoinCode = "fc94:b01d:1803:8dd8:b293:5c7d:7639:932a/xxxxxxxxxxxxxxxxxxxxxx
  • 在此处添加您的 Wi-Fi 网络凭据:
// WiFi credentials
const char* wifiNetworks[][2] = {
  {"wifi-ssid-one", "wifi-pass-one"},
  {"wifi-ssid-two", "wifi-pass-two"},
}
  • 如果您的 ESP32 板是 ESP32 TTGO T Display,那么您可以通过第 14 行启用 LCD/TFT 显示
#define ENABLE_TFT 1  //tested on TTGO T Display
  • 将项目上传到您的ESP32 板(所有板的代码相同)
  • 为两个 ESP32 模块供电并等待大约 15 秒,让您的 ESP32 设备连接到 Wi-Fi 网络并建立 P2P 连接(在 LAN 和 Internet 中均有效)。

就这样!我希望你会喜欢。很高兴看到您的反馈。

干杯!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"//www.hzfubeitong.com/m/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="https://m.elecfans.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'ESP32到ESP32通过Internet进行通信',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.hzfubeitong.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);