当前位置:   article > 正文

基于springboot,用micropython开发esp32cam,整合mqtt,websocket,内网穿透技术,实现远程监控的demo_esp32内网穿透

esp32内网穿透

概要

最近买了一块esp32cam来玩了一下,发现网上现有的结合esp32cam的demo很多都是在局域网内,不能做到远距离监控,所以整合网上开源的部分代码并结合自己的知识体系来做了一个demo。

流程

内网穿透

图片传输的话最简单的就是局域网内进行,将电脑和esp32连接同一个wifi即可。但这样的话不能实现远程监控,弊端非常大。远程传输可以用自己的服务器也能用内网穿透实现,开始做这个的时候我看某些博主使用的是frp来进行内网穿透,当时就感觉挺复杂的,所以这里我就用来自己常用的内网穿透方式,使用cpolar。
cpolar下载地址
打开cpolar.exe,因为mqtt通讯协议的底层是tcp协议,然后mqtt平台默认是占用1883端口,所以我们的命令是在这里插入图片描述然后我们就可以看到内网穿透后的域名和端口。在这里插入图片描述
提示:保存域名和端口一会要用

esp32cam

esp32cam整合mqtt

esp32cam官方库里面是没有mqtt相关依赖的所以我们需要自己下载。

首先是连接wifi

在这里插入图片描述

import network
ssid='11'#wifi名
password = 'wjj200323'#密码
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
然后开始下载依赖

下载成功后可以在lib文件夹看见我们下载好的依赖。
在这里插入图片描述

import upip
upip.install('micropython-umqtt.simple')

  • 1
  • 2
  • 3
接下来烧录代码即可

提示:把里面的信息改成本机的,如wifi信息,域名端口填内网穿透后的

import network
from time import sleep
from machine import Pin, SPI
from umqtt.simple import MQTTClient
import ubinascii
import camera

# 连接到Wi-Fi网络
def connect_wifi():
    ssid = '你的wifi名称'
    password = '你的wifi密码'
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('连接到Wi-Fi网络...')
        wlan.connect(ssid, password)
        while not wlan.isconnected():
            pass
        print('Wi-Fi连接成功!')
        print('IP地址:', wlan.ifconfig()[0])
    else:
        print('Wi-Fi已连接!')

# 初始化摄像头模块
def init_camera():
    try:
        camera.init(0, format=camera.JPEG)
    except Exception as e:
        camera.deinit()
        camera.init(0, format=camera.JPEG)

    # 其他设置:
    # 上翻下翻
    camera.flip(1)
    # 左/右
    camera.mirror(1)

    # 分辨率
    camera.framesize(camera.FRAME_HVGA)
    # 选项如下:
    # FRAME_96X96 FRAME_QQVGA FRAME_QCIF FRAME_HQVGA FRAME_240X240
    # FRAME_QVGA FRAME_CIF FRAME_HVGA FRAME_VGA FRAME_SVGA
    # FRAME_XGA FRAME_HD FRAME_SXGA FRAME_UXGA FRAME_FHD
    # FRAME_P_HD FRAME_P_3MP FRAME_QXGA FRAME_QHD FRAME_WQXGA
    # FRAME_P_FHD FRAME_QSXGA
    # 有关详细信息,请查看此链接:https://bit.ly/2YOzizz

    # 特效
    camera.speffect(camera.EFFECT_NONE)
    # 选项如下:
    # 效果\无(默认)效果\负效果\ BW效果\红色效果\绿色效果\蓝色效果\复古效果
    # EFFECT_NONE (default) EFFECT_NEG \EFFECT_BW\ EFFECT_RED\ EFFECT_GREEN\ EFFECT_BLUE\ EFFECT_RETRO

    # 白平衡
    # camera.whitebalance(camera.WB_HOME)
    # 选项如下:
    # WB_NONE (default) WB_SUNNY WB_CLOUDY WB_OFFICE WB_HOME

    # 饱和
    camera.saturation(0)
    # -2,2(默认为0). -2灰度
    # -2,2 (default 0). -2 grayscale 

    # 亮度
    camera.brightness(0)
    # -2,2(默认为0). 2亮度
    # -2,2 (default 0). 2 brightness

    # 对比度
    camera.contrast(0)
    # -2,2(默认为0).2高对比度
    # -2,2 (default 0). 2 highcontrast

    # 质量
    camera.quality(10)
    # 10-63数字越小质量越高

# 连接到MQTT代理
def connect_mqtt():
    #第一个参数是mqtt的id,唯一就行
    #第二个参数是你的ip或者域名,
    #第三个是端口,如果是本机就不用填,默认1883
    c = MQTTClient("esp32cam", "###","##")
    c.connect()  # 调用connect()方法进行连接
    return c

# 发布图像到MQTT主题
def publish_image_to_mqtt(client):
    try:
        buf = camera.capture()
        base64_img = ubinascii.b2a_base64(buf).strip().decode('utf-8')
        client.publish('esp32', base64_img)
      #参数是mqtt的主题,要与服务端订阅一致不然接收不到数据,
        #client.publish('esp32cam', buf)
    except Exception as e:
        print('图像发布时出错:', e)

# 主函数
def main():
    connect_wifi()
    init_camera()
    client = connect_mqtt()
    while True:
        publish_image_to_mqtt(client)
        sleep(0.1)#越小发送数据越快

if __name__ == '__main__':
    main()


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110

烧录成功后就可以在mqtt平台看见信息。在这里插入图片描述
在这里插入图片描述

springboot服务端搭建

代码我已经上传gitee。服务端代码地址在这里插入图片描述
将yml文件里面的ip,端口改成内网穿透后的就可以启动项目了,信息成功接收。在这里插入图片描述
最后就可以访问网页了。在这里插入图片描述

总结

这样我第一次的博客分享就结束了,大家可以多交流,初学者了解了内网穿透技术也可以试试使用内网穿透技术让非本地,比如手机端,其他人的电脑来访问网页查看监控视频。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号