首页
留言板
友链
统计
Search
1
树莓派换源最新教程及注意事项(更换为清华源)
1,516 阅读
2
Alist上传大文件报错Request failed with status code 413
637 阅读
3
google colab打包下载文件夹
609 阅读
4
Luat Air780E/Air700E使用MQTT协议接入巴法云物联网平台
369 阅读
5
Luat Air780E/Air700E获取设备经纬度后使用MQTT协议发送至巴法云
339 阅读
嵌入式笔记
stm32
esp8266
raspberry-pi
esp32
机器视觉笔记
opencv
yolo
typecho笔记
vps
typecho美化
悄悄话
登录
Search
标签搜索
esp8266
air700e
typecho
onenet
mediapipe
悄悄话
星星
累计撰写
34
篇文章
累计收到
24
条评论
首页
栏目
嵌入式笔记
stm32
esp8266
raspberry-pi
esp32
机器视觉笔记
opencv
yolo
typecho笔记
vps
typecho美化
悄悄话
页面
留言板
友链
统计
搜索到
34
篇与
的结果
2024-07-26
冒泡~~~
好久好久都没有上线了,工作太忙啦~~~ ::(懒得理)等辞职后就有时间做自己喜欢的事情了~~~
2024年07月26日
21 阅读
0 评论
0 点赞
2023-12-31
博客添加春节灯笼
灯笼代码<!-- 灯笼代码 --> <meta charset="utf-8"> <div class="deng-box2"> <div class="deng"> <div class="xian"> </div> <div class="deng-a"> <div class="deng-b"> <div class="deng-t">年</div> </div> </div> <div class="shui shui-a"> <div class="shui-c"> </div> <div class="shui-b"></div> </div> </div> </div> <div class="deng-box3"> <div class="deng"> <div class="xian"> </div> <div class="deng-a"> <div class="deng-b"> <div class="deng-t">新</div> </div> </div> <div class="shui shui-a"> <div class="shui-c"></div> <div class="shui-b"> </div> </div> </div> </div> <div class="deng-box1"> <div class="deng"> <div class="xian"> </div> <div class="deng-a"> <div class="deng-b"> <div class="deng-t">乐</div> </div> </div> <div class="shui shui-a"> <div class="shui-c"></div> <div class="shui-b"></div> </div> </div> </div> <div class="deng-box"> <div class="deng"> <div class="xian"> </div> <div class="deng-a"> <div class="deng-b"> <div class="deng-t">快</div> </div> </div> <div class="shui shui-a"> <div class="shui-c"> </div> <div class="shui-b"></div> </div> </div> </div> <style type="text/css"> .deng-box { position: fixed; top: -40px; right: 150px; z-index: 9999; pointer-events: none; } .deng-box1 { position: fixed; top: -30px; right: 10px; z-index: 9999; pointer-events: none } .deng-box2 { position: fixed; top: -40px; left: 150px; z-index: 9999; pointer-events: none } .deng-box3 { position: fixed; top: -30px; left: 10px; z-index: 9999; pointer-events: none } .deng-box1 .deng, .deng-box3 .deng { position: relative; width: 120px; height: 90px; margin: 50px; background: #d8000f; background: rgba(216, 0, 15, .8); border-radius: 50% 50%; -webkit-transform-origin: 50% -100px; -webkit-animation: swing 5s infinite ease-in-out; box-shadow: -5px 5px 30px 4px #fc903d } .deng { position: relative; width: 120px; height: 90px; margin: 50px; background: #d8000f; background: rgba(216, 0, 15, .8); border-radius: 50% 50%; -webkit-transform-origin: 50% -100px; -webkit-animation: swing 3s infinite ease-in-out; box-shadow: -5px 5px 50px 4px #fa6c00 } .deng-a { width: 100px; height: 90px; background: #d8000f; background: rgba(216, 0, 15, .1); margin: 12px 8px 8px 8px; border-radius: 50% 50%; border: 2px solid #dc8f03 } .deng-b { width: 45px; height: 90px; background: #d8000f; background: rgba(216, 0, 15, .1); margin: -4px 8px 8px 26px; border-radius: 50% 50%; border: 2px solid #dc8f03 } .xian { position: absolute; top: -20px; left: 60px; width: 2px; height: 20px; background: #dc8f03 } .shui-a { position: relative; width: 5px; height: 20px; margin: -5px 0 0 59px; -webkit-animation: swing 4s infinite ease-in-out; -webkit-transform-origin: 50% -45px; background: orange; border-radius: 0 0 5px 5px } .shui-b { position: absolute; top: 14px; left: -2px; width: 10px; height: 10px; background: #dc8f03; border-radius: 50% } .shui-c { position: absolute; top: 18px; left: -2px; width: 10px; height: 35px; background: orange; border-radius: 0 0 0 5px } .deng:before { position: absolute; top: -7px; left: 29px; height: 12px; width: 60px; content: " "; display: block; z-index: 999; border-radius: 5px 5px 0 0; border: solid 1px #dc8f03; background: orange; background: linear-gradient(to right, #dc8f03, orange, #dc8f03, orange, #dc8f03) } .deng:after { position: absolute; bottom: -7px; left: 10px; height: 12px; width: 60px; content: " "; display: block; margin-left: 20px; border-radius: 0 0 5px 5px; border: solid 1px #dc8f03; background: orange; background: linear-gradient(to right, #dc8f03, orange, #dc8f03, orange, #dc8f03) } .deng-t { font-family: 黑体, Arial, Lucida Grande, Tahoma, sans-serif; font-size: 3.2rem; color: #dc8f03; font-weight: 700; line-height: 85px; text-align: center } .night .deng-box, .night .deng-box1, .night .deng-t { background: 0 0 !important } @-moz-keyframes swing { 0% { -moz-transform: rotate(-10deg) } 50% { -moz-transform: rotate(10deg) } 100% { -moz-transform: rotate(-10deg) } } @-webkit-keyframes swing { 0% { -webkit-transform: rotate(-10deg) } 50% { -webkit-transform: rotate(10deg) } 100% { -webkit-transform: rotate(-10deg) } } </style>插入位置在 <head> 前面粘贴代码
2023年12月31日
24 阅读
0 评论
0 点赞
2023-11-22
网站迁移遇到的问题及解决方法
宝塔面板环境 PHP-74插件 国内云服务器、境外地区访问面板异常的解决方法 连接面板失败以及使用面板下载软件时报错ssl 443错误等 解决方法#国内、香港机器优先选择这条命令执行 sed -i "/bt.cn/d" /etc/hosts echo "103.179.243.14 www.bt.cn download.bt.cn api.bt.cn dg1.bt.cn dg2.bt.cn" >> /etc/hosts云服务器境外地区的用户,可以尝试执行下面的命令,指定这个节点解决此问题sed -i "/bt.cn/d" /etc/hosts echo "128.1.164.196 www.bt.cn download.bt.cn api.bt.cn dg1.bt.cn dg2.bt.cn" >> /etc/hosts注意:没有使用上的问题或只是偶尔卡一下的不要执行上面的命令,避免影响体验!已经误执行命令的可以执行这条命令清理绑定的节点:sed -i "/bt.cn/d" /etc/hosts如果使用上面的方法仍无法解决:执行以下的命令自动修复下节点看看,不要在宝塔面板自带的终端里执行wget http://125.90.93.52/tools/auto_fix.sh && bash auto_fix.sh修改/etc/hosts之后正常情况应该是保存之后立即生效的,但是有时不是。使用uname -a 可以查看hostname是多少,就可以知道是否修改生效了。如果没有这时的策略有:1) 重启机器2) 重启服务 Ubuntu: 'sudo /etc/init.d/networking restart' Gentoo: '/etc/init.d/net.eth0 restart'3)使用hostname命令 hostname 定义的主机名 nginx启动或者重启提示信息如下:'nginx: [emerg] unknown "connection_upgrade" variablenginx: configuration file /www/server/nginx/conf/nginx.conf test failed' 解决方法在nginx配置文件http标签下添加如下几行: map $http_upgrade $connection_upgrade { default upgrade; '' close; }迁移简单图床问题及解决办法问题:发现使用宝塔面板自带迁移工具迁移图床后,图片打开404解决方法:新宝塔面板先创建简单图床,初始化完成后,将原图床的i文件夹压缩并上传至新图床中解压保存。
2023年11月22日
73 阅读
0 评论
0 点赞
2023-10-05
vps测速脚本
脚本bash <(curl -Lso- https://git.io/superspeed_uxh)效果——————————————————————————————————————————————————————————ID 测速服务器信息 上传/Mbps 下载/Mbps 延迟/ms34115 电信|天津5G ↑ 15.59 ↓ 64.48 240.73 17145 电信|安徽合肥5G ↑ 50.30 ↓ 64.06 294.99 3973 电信|甘肃兰州 ↑ 2.65 ↓ 11.31 483.78 28225 电信|湖南长沙5G ↑ 37.57 ↓ 13.14 269.85 26352 电信|江苏南京5G ↑ 9.81 ↓ 62.24 255.60 24447 联通|上海5G ↑ 49.08 ↓ 62.15 302.56 36646 联通|河南郑州5G ↑ 40.85 ↓ 58.39 344.64 4870 联通|湖南长沙 ↑ 33.13 ↓ 2.99 327.93 25858 移动|北京 ↑ 27.62 ↓ 194.87 260.00 29105 移动|陕西西安5G ↑ 44.53 ↓ 61.90 265.44 —————————————————————————————————————————————————————————— 测试完成, 本次测速耗时: 6 分 33 秒
2023年10月05日
44 阅读
0 评论
0 点赞
2023-04-25
opencv视觉小游戏—石头剪刀布
效果展示{bilibili bvid="BV1aQ4y1Q7Lf" page=""/}程序代码{cloud title="石头剪刀布源码" type="lz" url="https://wwtn.lanzout.com/inakT0txuo1i" password=""/}石头剪刀布代码解释 这是一个手势石头剪刀布游戏的Python代码。这个游戏使用计算机视觉技术检测玩家的手势,并将其与计算机生成的随机手势进行比较。玩家和计算机都可以选择石头,剪刀或布。如果玩家赢了,则得分加1,如果玩家输了,则得分减1。如果平局,则不会加分或减分。游戏将持续进行直到程序被停止。1、代码首先导入所需的库,包括cv2(OpenCV)用于图像处理和检测手势,time用于计时,os用于读取图像文件,以及一个名为HandTrackingModule的自定义模块,用于手势识别。然后,代码设置一些常量,包括摄像头的宽度和高度,胜利和失败的消息,以及一个用于存储图像文件的文件夹路径。2、接下来,代码读取图像文件夹中的所有图像文件,并将它们存储在一个列表中。然后,代码初始化一个HandTrackingModule对象,用于检测手势。代码还定义了一个包含手指顶部ID的列表,这些ID对应于手指的末端。最后,代码进入一个无限循环,每次循环中检测玩家的手势并计算得分。3、在每次循环中,代码读取摄像头的当前帧,并使用HandTrackingModule对象检测手势。代码检查检测到的手指数量,并将其与预设的手势相匹配(石头、剪刀、布)。如果匹配成功,则代码将显示相应的消息并将变量end设置为“win”或“fail”,表示玩家赢了或输了。代码还将检查计算机随机生成的手势,并将其显示在图像上。4、一旦检测到手势,代码将比较玩家的手势和计算机生成的手势。如果两者相同,则比赛平局。如果玩家赢了,则得分加1,如果玩家输了,则得分减1。代码将显示得分,以及最近一次比赛的结果。5、一旦比赛结束并且时间超过两秒钟,代码将重置所有变量并开始新的游戏。HandTrackingModule代码解释1、这是一个使用Mediapipe库和OpenCV库实现的手部检测器。它可以检测图像或视频中的手部,并给出手部的关键点位置。这个程序使用了一个名为handDetector()的类来实现手部检测和关键点检测。该类的构造函数可以设置一些参数,如最大手数、检测置信度和跟踪置信度等。2、findHands()函数使用Mediapipe库来检测图像中的手部,并在图像中绘制出检测到的手部的关键点。findPosition()函数可以通过检测到的关键点返回手部的关键点位置。3、在主函数中,我们打开计算机的摄像头,不断地读取帧,并在每一帧中调用findHands()和findPosition()函数来检测手部,并绘制关键点。程序还会计算每秒钟处理的帧数(FPS)并显示在窗口中。
2023年04月25日
124 阅读
0 评论
0 点赞
2023-04-21
Luat Air780E/Air700E获取设备经纬度后使用MQTT协议发送至巴法云
Air780E/Air700E开发板基于Lua语言使用MQTT协议接入巴法云物联网平台,获取gps模块经纬度数据后上传巴法云。
2023年04月21日
339 阅读
3 评论
0 点赞
2023-04-05
Luat Air780E/Air700E使用定位模块获取设备经纬度
先来代码-- LuaTools需要PROJECT和VERSION这两个信息 PROJECT = "uart_gps" VERSION = "1.0.0" log.info("main", PROJECT, VERSION) -- 引入必要的库文件(lua编写), 内部库不需要require sys = require("sys") if wdt then --添加硬狗防止程序卡死,在支持的设备上启用这个功能 wdt.init(9000)--初始化watchdog设置为9s sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗 end log.info("main", "uart demo") local uartid = 2 -- 根据实际设备选取不同的uartid --初始化 local result = uart.setup( uartid,--串口id 9600,--波特率 8,--数据位 1--停止位 ) -- 收取数据会触发回调, 这里的"receive" 是固定值 uart.on(uartid, "receive", function(id, len) local s = "" repeat -- 如果是air302, len不可信, 传1024 -- s = uart.read(id, 1024) s = uart.read(id, len) if #s > 0 then -- #s 是取字符串的长度 -- log.info("uart", "receive", id, #s, s) local utc_time, lat, lat_ns, lon, lon_ew = string.match(s, "%$GNGGA,(%d+%.%d+),(%d+%.%d+),(%a),(%d+%.%d+),(%a),") if utc_time and lat and lat_ns and lon and lon_ew then log.info("uart", "UTC Time", utc_time) local hour = tonumber(utc_time:sub(1,2)) local minute = tonumber(utc_time:sub(3,4)) local second = tonumber(utc_time:sub(5,6)) hour = hour +8 if hour >=24 then hour = hour -24 end local time_str = string.format("%02d:%02d:%02d", hour, minute, second) -- 转换为时分秒格式 log.info("uart", "Beijing Time", time_str) -- 转换经纬度为GPS坐标格式 local lat_deg = math.floor(tonumber(lat) / 100) local lat_min = tonumber(lat) % 100 local lat_google = lat_deg + lat_min / 60 if lat_ns == "S" then lat_google = -lat_google end log.info("uart", "Latitude", lat_google) local lon_deg = math.floor(tonumber(lon) / 100) local lon_min = tonumber(lon) % 100 local lon_google = lon_deg + lon_min / 60 if lon_ew == "W" then lon_google = -lon_google end log.info("uart", "Longitude", lon_google) end end if #s == len then break end until s == "" end) -- 用户代码已结束--------------------------------------------- -- 结尾总是这一句 sys.run() -- sys.run()之后后面不要加任何语句!!!!!代码解释这段代码实现了通过UART串口读取GPS模块发送的数据,并对数据进行解析和处理,最终输出解析后的结果。具体解释如下:1、设置项目名称和版本号:首先通过 PROJECT 和 VERSION 变量分别设置了项目名称和版本号。2、输出项目名称和版本号:使用 log.info() 函数输出项目名称和版本号。3、引入必要的库文件:使用 require() 函数引入了系统库 sys,用于后续的定时器操作和系统运行。4、如果硬件支持硬狗,初始化并启用硬狗功能:检查系统是否支持硬狗,如果支持则通过 wdt.init() 函数初始化硬狗并设置喂狗时间,通过 sys.timerLoopStart() 函数循环定时喂狗,以避免程序卡死等异常情况。5、输出提示信息:使用 log.info() 函数输出提示信息,表示进入了GPS数据读取和处理的代码段。6、设置UART串口ID:通过 uartid 变量设置了UART串口的ID,这里设置为2。7、初始化UART串口:使用 uart.setup() 函数初始化UART串口,设置波特率为9600,数据位为8位,停止位为1位。8、注册UART串口数据接收回调函数:使用 uart.on() 函数注册UART串口数据接收回调函数,当串口接收到数据时会自动触发回调函数,并将接收到的数据长度作为参数传入回调函数。9、处理UART串口接收到的数据:在回调函数中,使用 uart.read() 函数循环读取串口数据,并使用 string.match() 函数对读取到的数据进行正则匹配,提取出其中的经纬度和时间等信息,然后进行格式转换和计算,并使用 log.info() 函数输出解析后的信息。10、最后,运行代码:通过 sys.run() 函数启动系统运行,让代码可以正常执行。重点代码解释1、定位模块输出(波特率为9600):$GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7,M,0.0,M,,*48 $GNGLL,2236.9453,N,11408.4790,E,084852.000,A,A*4C $GPGSA,A,3,10,18,31,,,,,,,,,,6.3,3.1,5.4*3E $BDGSA,A,3,06,07,,,,,,,,,,,6.3,3.1,5.4*24 $GPGSV,3,1,09,10,78,325,24,12,36,064,,14,26,307,,18,67,146,27*71 $GPGSV,3,2,09,21,15,188,,24,13,043,,25,55,119,,31,36,247,30*7F $GPGSV,3,3,09,32,42,334,*43 $BDGSV,1,1,02,06,68,055,27,07,82,211,31*6A $GNRMC,084852.000,A,2236.9453,N,11408.4790,E,0.53,292.44,141216,,,A*7 5 $GNVTG,292.44,T,,M,0.53,N,0.98,K,A*2D $GNZDA,084852.000,14,12,2016,00,00*48 $GPTXT,01,01,01,ANTENNA OK*352、获取经纬度及北京时间:(1)首先使用 uart.read() 函数从串口读取一行数据。使用 string.match() 函数对读取到的数据进行正则匹配,以提取出 "$GNGGA" 行中的经纬度和时间信息。正则表达式为: "%$GNGGA,(%d+%.%d+),(%d+%.%d+),(%a),(%d+%.%d+),(%a)," 其中,括号中的内容表示正则表达式匹配到的结果需要提取出来,具体匹配结果如下:第一个括号 (%d+%.%d+) 表示匹配一个或多个数字,可能包含小数点,表示UTC时间,例如:"084852.000"第二个括号 (%d+%.%d+) 表示匹配一个或多个数字,可能包含小数点,表示纬度,例如:"2236.9453"第三个括号 (%a) 表示匹配一个字母,表示纬度方向,可能为 "N" 或 "S"第四个括号 (%d+%.%d+) 表示匹配一个或多个数字,可能包含小数点,表示经度,例如:"11408.4790"第五个括号 (%a) 表示匹配一个字母,表示经度方向,可能为 "E" 或 "W"(2)使用 tonumber() 函数将读取到的经纬度和时间信息从字符串类型转换为数字类型,并根据具体格式进行转换。例如,对于UTC时间信息,可以使用 string.sub() 函数获取小时、分钟、秒等信息,再进行格式化输出。(3)将经纬度转换为Google Maps格式,即将度分格式转换为十进制格式,并根据方向调整正负值。(4)使用 log.info() 函数输出解析后的结果,包括北京时间、纬度和经度等信息。{alert type="warning"}注:其中,string.match() 函数的正则表达式 "%$GNGGA,(%d+%.%d+),(%d+%.%d+),(%a),(%d+%.%d+),(%a)," 表示匹配以 "$GNGGA" 开头的行,并从中提取出符合规则的内容。具体解释如下:(1)%d+%.%d+ 表示匹配一个或多个数字,可能包含小数点,例如 "084852.000" 和 "2236.9453"(2)%a 表示匹配一个字母,例如 "N" 和 "E"(3)() 表示将括号中的内容作为一个匹配组,需要在 string.match() 函数的返回值中获取。解析出经纬度和时间后,通过数学运算和字符串格式化等操作,将其转换为可以直接使用的格式,并使用 log.info() 函数输出解析后的结果。{/alert}
2023年04月05日
250 阅读
1 评论
0 点赞
1
2
...
5