首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

低代码单片机快速实现网络摄像机+温湿度+LED灯控

网络摄像机+温湿度+LED灯控

本文基于 FlexLua 低代码单片机技术,无需复杂单片机C语言开发。即使新手也可很容易用FlexLua零门槛开发各种功能丰富稳定可靠的 IoT 硬件,更多学习教程可参考 FlexLua 官网。

一、本例程实现功能

让开发板在局域网环境变成一台网络摄像机,不仅可以通过电脑或手机Web浏览器查看实时视频流,还可以控制开发板上的Led灯亮灭,以及获取开发板上温湿度并在网页上实时显示。需要注意的是电脑或手机也需要是在此局域网内。

二、举一反三

基于本例程还可以很容易衍生出一些更实用的方案:

远程视频监控+远程继电器控制

远程视频监控+远程舵机控制

远程视频监控+远程传感器数据读取、

远程视频监控+IO读取

三、ShineBlink Cam 传感器介绍

供电:USB 5v供电或5v引脚供电

板载摄像头模块、温湿度模块、以及ShineBlink开发板

支持8路IO控制、4路AD电压采集、1路Uart串口通信、1路IIc通信扩展

四、CAM底板结构图

五、材料清单

自制 Cam PCB 底板(开源资料请参考 《CAM 底板开源硬件资料》文件)

ShineBlink Mini 开发板(已含 Led 灯)

SHT30 IIc 温湿度传感器模块

六、完整代码

(1)ShineBlink Mini开发板Lua源代码如下:

HW =

{

"1103",--Wifi账号

"123321123",--Wifi密码

"FRAMESIZE_SVGA",--摄像头采集图片尺寸为SVGA,SVGA:800*600,尽量不要高于SVGA

"12"--摄像头采集图片的质量为12,必须为"1"~"63",其中"1"质量最高

}

IP =

{

"Dynamic",--表示动态IP模式,动态IP模式下,忽略下面5项,"Static"时需要配置下面5项

"0.0.0.0",--本机IP地址

"0.0.0.0",--gateway地址

"0.0.0.0",--subnet地址

"0.0.0.0",--首选DNS地址

"0.0.0.0"--次选DNS地址

}

SERVER =

{

"80",--本机视频流Web http Server端口号

"81"--本机视频流服务端口号

}

H1 = --Http server vedio stream response H1

{

"multipart/x-mixed-replace;boundary=123456789000000000987654321"

}

H2 = --Http server vedio stream response H2

{

"Content-Type: image/jpeg\r\nContent-Length: %d\r\n\r\n"

}

--注意:上面H2中的%d占位符一定不要去掉,它会自动计算每次发送的图片尺寸大小并填充进去。

H3 = "\r\n--123456789000000000987654321\r\n" --H3 stream boundary

--全局变量

Timer10MsCnt=0

Timer10MsCnt1=0

temprature = 0.0

humidity = 0.0

--定义10毫秒定时器的回调函数,函数名字必须是LIB_10msTimerCallback

function LIB_10msTimerCallback()

Timer10MsCnt = Timer10MsCnt + 10

Timer10MsCnt1 = Timer10MsCnt1 + 10

end

--使能USB串口打印

LIB_UsbConfig("CDC")

--配置D8 Wifi Led指示灯(Core电路板上的LED1灯和D8端口是固定连接的)

LIB_GpioOutputConfig("D8","STANDARD")

--配置D9 Wifi Led指示灯(Core电路板上的LED2灯和D9端口是固定连接的)

LIB_GpioOutputConfig("D9","STANDARD")

--LED1灭

LIB_GpioWrite("D8",1)

--LED2灭

LIB_GpioWrite("D9",1)

--初始化sht3x传感器占用SCL0和SDA0引脚,10Hz频率工作,"HIGH"时精度最高

LIB_Sht3xConfig("IIC0","10","HIGH")

--初始化,Vedio Web Server开始工作

Res,Info=LIB_EspCamOp("Config","WEB_VEDIO_ENHANCE","UART0",HW,IP,SERVER,H1,H2,H3)

if Res == 0 then

print(Info) --打印初始化失败原因

end

--使能系统10毫秒定时器开始工作

LIB_10msTimerConfig("ENABLE")

--开始大循环

while(GC(1) == true)

do

--查询sht3x传感器是否出数

sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult()

--如果传感器有新的温湿度数据产生

if sht3x_flag == 1 then

temprature = sht3x_temp

humidity = sht3x_humi

end

--每200ms更新一次传感器值,这样Web客户端就能看到传感器值的变化,并且能及时收到客户端发来的命令

if Timer10MsCnt1 > 200 then

Timer10MsCnt1 = 0

Res,Info=LIB_EspCamOp("WebserverUpdate",string.format("{\"temp\":\"%.2f\",\"humi\":\"%.2f\"}", temprature, humidity))

if Res == 1 then

if Info ~= "null" then --收到客户端发来的cmd命令

print(Info)

--网页端上的按钮按下后发来的Info字符串的形式如:"xxx=yyy"

xxx,yyy = string.match(Info, "(%a+)=(%a+)") --用通配符提取出xxx和yyy这两个字符串

if xxx == "cmd" then

if yyy == "LedOn" then

LIB_GpioWrite("D9",0) --LED2亮

elseif yyy == "LedOff" then

LIB_GpioWrite("D9",1) --LED2灭

else

end

end

end

end

end

--每三秒查询一次WIFI连接状态

if Timer10MsCnt > 3000 then

Timer10MsCnt = 0

Res,Info=LIB_EspCamOp("WifiStatus")

if Res == 1 then

WifiIsConnect = 1

print(Info) --打印IP

LIB_GpioWrite("D8",0)--WIFI连接时,开发板上的Led1灯亮

else

LIB_GpioWrite("D8",1)--WIFI未连接时,开发板上的Led1灯灭

print(Info) --打印WIFI未连接时的状态

end

end

end

如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

(2)除了需将以上代码下载到 ShineBlink Mini 开发板,还需要将 index.html 文件放入 ESP32-CAM 摄像头模块板子上的 TF 卡中。index.html 中的代码没做过前端开发的同学可能会比较陌生,但并不难,花几分钟仔细看一下应该能看懂,看懂了稍微修改一下,即可很容易改出各种定制化的页面和项目。

index.html 文件放在{FlexLua开源网盘}->{Hardware}->{OTHERS}->{ESPCAM} 文件夹中。

七、代码运行结果

代码运行之后,我们可以通过串口调试助手看到开发板被动态分配的IP地址:

然后在处于同一局域网内的电脑浏览器上输入这个192.168.43.224 IP地址即可访问视频:

八、如何实现外网访问局域网内的摄像头+Webserver

在上面的举一反三中已经提到如何通过外网访问内网:

花生壳内网穿透。

路由器WAN口带公网I。

在此之前开发者还需要将开发板的IP地址由动态分配方式改成静态IP,实现方式很简单,只需改动Lua代码中的IP配置table列表中的内容即可,类似改动如下,请结合自己的局域网配置更改,下面的只是个参考例子:

IP =

{

"Static",

"192.168.43.55",--本机IP地址

"192.168.43.1",--gateway地址

"255.255.255.0",--subnet地址

"8.8.8.8",--首选DNS地址

"114.114.114.114"--次选DNS地址

}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OtKFmV5M9mTO37BxaIOW3U7w0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券