首页
关于我
友链
小程序
小黑屋
Search
1
windows11系统自带VPN连接不上群辉VPN服务器问题
618 阅读
2
数字振镜XY2-100协议
613 阅读
3
使用ESP8266完成校园网WEB认证
575 阅读
4
将校园卡复制到小米手环
548 阅读
5
frp+softether_vpn实现外网访问校园网
514 阅读
技术
生活
登录
Search
标签搜索
qt
mqtt
FreeRTOS
stm32
iar
VPN
光猫破解
esp8266
群晖
VideoStation
exti
c++
eclipse
bootloader
pixhawk
遥控器
失控保护
ARM
NAS
ENPASS
AMENG
累计撰写
79
篇文章
累计收到
14
条评论
首页
栏目
技术
生活
页面
关于我
友链
推荐
小黑屋
搜索到
79
篇与
的结果
2021-09-26
使用ESP8266完成校园网WEB认证
学校校园网限制连接设备,只能一台手机一台电脑,而要用平板啥的必须先把手机连接断开(万马奔腾)。哪里有压迫哪里就有反抗,于是就想到用路由器拨号解决设备限制问题。学校宿舍区采用锐捷认证,在路由器上安装锐捷认证插件就可以解决,而办公区采用的是卓智的校园网WEB认证,每次打开网页弹出登录页面。在路由器里没法解决这个问题,只能用电脑打开网页认证,后来用着发现只要路由器下有一台设备认证了,路由器下的其它设备就可以不用认证直接联网了。但是学校有时晚上会断电,断电后就又得重新认证了,由于电脑上挂着一些服务,断网后远程就没法访问了,于是就打算用ESP8266发送认证包,是路由器连上网。通过抓包分析发现认证过程就是发送一个post数据,通过fiddler抓取数据后利用esp8266发送认证数据就可以了,通过Ping百度实现断线重连。#include <ESP8266WiFi.h> #include <string.h> #include <ESP8266HTTPClient.h> #include <ESP8266Ping.h> struct http_request { String Referer; char* host; int httpPort=80; String host_ur ; String usr_name; String usr_pwd; String postDate; }; http_request ruqest; /*WIFI账号和密码*/ const char* ssid = "xxxx"; // Enter SSID here const char* password = "xxxx"; //Enter Password here /*-------------------------------------------------------------- 通过上网认证,请自己修改postDate中的学号和密码 ---------------------------------------------------------------*/ int hdulogin(struct http_request ruqest) { WiFiClient client; if (!client.connect(ruqest.host, ruqest.httpPort)) { Serial.println("connection failed"); return 1; } delay(10); if (ruqest.postDate.length() && ruqest.postDate != "0") { String data = (String)ruqest.postDate; int length = data.length(); String postRequest = (String)("POST ") + "/"+ruqest.host_ur+" HTTP/1.1\r\n" + "Host: " +ruqest.host + "\r\n" + "Connection: Keep Alive\r\n" + "Content-Length: " + length + "\r\n" + "Accept: */*\r\n" + "Origin: http://"+ruqest.host+"\r\n" + "Upgrade-Insecure-Requests: 1"+"\r\n" + "Content-Type: application/x-www-form-urlencoded;" + "\r\n" + "User-Agent: zyzandESP8266\r\n" + "Accept-Encoding: gzip, deflate"+"\r\n" + "Accept-Language: zh-CN,zh;q=0.9"+"\r\n" + "\r\n" + data + "\r\n"; client.print(postRequest); delay(600); //处理返回信息 String line = client.readStringUntil('\n'); while (client.available() > 0) { line += "\r\n"+client.readStringUntil('\n'); } Serial.println(line); client.stop(); if (line.indexOf("时间") != -1 || line.indexOf("登陆") != -1) { //认证成功 return 0; Serial.println("time ----------- find "); } else { return 2; } } client.stop(); return 2; } void setup() { Serial.begin(115200); delay(1000); Serial.println(""); Serial.println("Connecting to "); Serial.println(ssid); //connect to your local wi-fi network WiFi.begin(ssid, password); //check wi-fi is connected to wi-fi network while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // 认证上网 ruqest.Referer="http://222.197.192.59:9090/zportal/login/do"; ruqest.host = "222.197.192.59"; ruqest.httpPort = 9090; ruqest.host_ur = "zportal/login/do"; ruqest.usr_name="2021111111";//账号 ruqest.usr_pwd="1111111";//密码 ruqest.postDate = String("")+"qrCodeId=请输入编号&username="+ruqest.usr_name+"&pwd="+ruqest.usr_pwd+"&validCode=验证码&validCodeFlag=false&ssid=&mac=ec8c6b0d71bb76d4f28b16895de595e1&t=wireless-v2&wlanacname=7717b8c143d93e3a1fdcfa4aa07d37a9&url=67c2b8eeda616d379b23c9e993a4072517529ecb4c8ab85684da54aea08a8ce06e8fc897829d8d8a&nasip=1223114e4ff3cad74a2437106670b0eb&wlanuserip=5bf3a64063ec6e616ac72003610d8f9c"; hdulogin(ruqest); } void loop() { if(WiFi.status() == WL_CONNECTED){ bool ret = Ping.ping("www.baidu.com"); if (ret) { // 打印返回代码 Serial.printf("Success. Ping=%d\n", ret); } else { Serial.print("failed. Reconnect\n"); hdulogin(ruqest); } delay(5000); } }
2021年09月26日
575 阅读
1 评论
0 点赞
2021-09-04
晶体、晶粒、晶胞、晶格
晶体与非晶体自然界中的物质存在状态有三种:气态、液态、固态。固体又可以分为三大类:晶体、非晶体和准晶体。晶体是经过结晶过程而形成的具有规则的几何外形的固体;晶体中原子或分子在空间按一定规律周期性重复的排列。晶体共同特点:均匀性:晶体内各个部分的宏观性质是相同的。各向异性:晶体中不同方向上具有不同的物理性质。(单晶体)固定熔点:晶体具有周期性结构,熔化时,各部分需要同样的温度。规则外形:理想环境中生长的晶体应为凸多边形。对称性:晶体的理想外形和晶体内部结构都具有特定的对称性。最小内能:成形晶体内能最小。对晶体的研究,固体物理学家从成键角度分为:离子晶体、原子晶体、分子晶体、金属晶体。与晶体对应的,结构无序或者近程有序而长程无序的物质,组成物质的原子或分子无规则排列,无周期性无对称性的固体叫非晶体;它的物理性质在各个方向上是相同的,叫各向同性。它没有固定熔点,所以有人把非晶体叫做“过冷液体”或“流动性很小的液体”。如玻璃,非晶碳。所以非晶态又称为玻璃态。晶粒从液态转变为固态的过程首先要成核,然后生长,这个过程叫晶粒的成核长大。晶粒内分子、原子都是有规则排列的,所以一个晶粒就是单晶。多个晶粒,每个晶粒的大小和形状不同,而且取向也是凌乱的,没有明显的外形,也不表现各向异性,是多晶。 对于大多数的金属材料,晶粒越细,材料力学性能越好,导电性能越差。当晶粒尺寸在1nm-100nm之间的时候就可以称为纳米晶,构成的材料也就可以称为纳米材料。晶格和晶胞晶格是理论模型,有限种,是理论原子结构排列最小单元晶胞实际模型,无数种。晶粒是无数晶胞组合在一起组成的立体
2021年09月04日
183 阅读
0 评论
0 点赞
2021-08-31
Typecho 网站域名更换方法
Typecho 网站域名更换,分成两部分,一部分是网站通用的域名更换的准备工作,另一部分是针对 Typecho 的网站域名更换。通用网站域名更换方法1、域名解析,把新网站域名解析到网站 IP 上2、修改 web 服务器配置文件,如 nginx.conf 、.htaccess、以及配置 SSL 证书等3、修改站点配置和网站内容Typecho 网站域名更换Typecho 网站的域名更换方法和上面的基本一致,在第三点上可能有一些通过数据库操作的便捷方法。对于网站配置和网站内容的修改,一种办法是进入到网站后台,挨个进行修改,只是这种方法太过于麻烦和耗时,另一种简易的办法是通过数据库直接进行修改,非常便捷,有遗漏的手动进行查漏补缺即可。以下 SQL 语句默认表前缀为 typecho_,若你的数据库表前缀不是 typecho_,请自行修改语句。修改 typecho_options 表将网站的设置里的域名替换成新的域名:```php UPDATE `typecho_options` SET `value` = '新域名地址' WHERE `typecho_options`.`name` = 'siteUrl' AND `typecho_options`.`user` =0; ```修改 typecho_contents 表将网站文章里的旧域名替换成新的域名:```php UPDATE `typecho_contents` SET `text` = REPLACE(`text`,'旧域名地址','新域名地址'); ```修改 typecho_users 表将管理员的个人网站进行替换```php UPDATE `typecho_users` SET `url` = REPLACE(`url`,'旧域名地址','新域名地址'); ```修改 typecho_comments 表对评论中的管理员的域名,和评论中的旧域名进行替换```php UPDATE `typecho_comments` SET `url` = REPLACE(`url`,'旧域名地址','新域名地址'); UPDATE `typecho_comments` SET `text` = REPLACE(`text`,'旧域名地址','新域名地址'); ```如果使用的域名邮箱,也建议进行更换```php UPDATE `typecho_comments` SET `mail` = REPLACE(`mail`,'旧域名地址','新域名地址'); ```
2021年08月31日
199 阅读
0 评论
0 点赞
2021-08-29
Git 常用命令
仓库# 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url]配置# 显示当前的Git配置 $ git config --list # 编辑Git配置文件 $ git config -e [--global] # 设置提交代码时的用户信息 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]"增加/删除文件# 添加指定文件到暂存区 $ git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录 $ git add [dir] # 添加当前目录的所有文件到暂存区 $ git add . # 添加每个变化前,都会要求确认 # 对于同一个文件的多处变化,可以实现分次提交 $ git add -p # 删除工作区文件,并且将这次删除放入暂存区 $ git rm [file1] [file2] ... # 停止追踪指定文件,但该文件会保留在工作区 $ git rm --cached [file] # 改名文件,并且将这个改名放入暂存区 $ git mv [file-original] [file-renamed]代码提交# 提交暂存区到仓库区 $ git commit -m [message] # 提交暂存区的指定文件到仓库区 $ git commit [file1] [file2] ... -m [message] # 提交工作区自上次commit之后的变化,直接到仓库区 $ git commit -a # 提交时显示所有diff信息 $ git commit -v # 使用一次新的commit,替代上一次提交 # 如果代码没有任何新变化,则用来改写上一次commit的提交信息 $ git commit --amend -m [message] # 重做上一次commit,并包括指定文件的新变化 $ git commit --amend [file1] [file2] ...分支# 列出所有本地分支 $ git branch # 列出所有远程分支 $ git branch -r # 列出所有本地分支和远程分支 $ git branch -a # 新建一个分支,但依然停留在当前分支 $ git branch [branch-name] # 新建一个分支,并切换到该分支 $ git checkout -b [branch] # 新建一个分支,指向指定commit $ git branch [branch] [commit] # 新建一个分支,与指定的远程分支建立追踪关系 $ git branch --track [branch] [remote-branch] # 切换到指定分支,并更新工作区 $ git checkout [branch-name] # 切换到上一个分支 $ git checkout - # 建立追踪关系,在现有分支与指定的远程分支之间 $ git branch --set-upstream [branch] [remote-branch] # 合并指定分支到当前分支 $ git merge [branch] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit] # 删除分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]标签# 列出所有tag $ git tag # 新建一个tag在当前commit $ git tag [tag] # 新建一个tag在指定commit $ git tag [tag] [commit] # 删除本地tag $ git tag -d [tag] # 删除远程tag $ git push origin :refs/tags/[tagName] # 查看tag信息 $ git show [tag] # 提交指定tag $ git push [remote] [tag] # 提交所有tag $ git push [remote] --tags # 新建一个分支,指向某个tag $ git checkout -b [branch] [tag]查看信息# 显示有变更的文件 $ git status # 显示当前分支的版本历史 $ git log # 显示commit历史,以及每次commit发生变更的文件 $ git log --stat # 搜索提交历史,根据关键词 $ git log -S [keyword] # 显示某个commit之后的所有变动,每个commit占据一行 $ git log [tag] HEAD --pretty=format:%s # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 $ git log [tag] HEAD --grep feature # 显示某个文件的版本历史,包括文件改名 $ git log --follow [file] $ git whatchanged [file] # 显示指定文件相关的每一次diff $ git log -p [file] # 显示过去5次提交 $ git log -5 --pretty --oneline # 显示所有提交过的用户,按提交次数排序 $ git shortlog -sn # 显示指定文件是什么人在什么时间修改过 $ git blame [file] # 显示暂存区和工作区的差异 $ git diff # 显示暂存区和上一个commit的差异 $ git diff --cached [file] # 显示工作区与当前分支最新commit之间的差异 $ git diff HEAD # 显示两次提交之间的差异 $ git diff [first-branch]...[second-branch] # 显示今天你写了多少行代码 $ git diff --shortstat "@{0 day ago}" # 显示某次提交的元数据和内容变化 $ git show [commit] # 显示某次提交发生变化的文件 $ git show --name-only [commit] # 显示某次提交时,某个文件的内容 $ git show [commit]:[filename] # 显示当前分支的最近几次提交 $ git reflog远程同步# 下载远程仓库的所有变动 $ git fetch [remote] # 显示所有远程仓库 $ git remote -v # 显示某个远程仓库的信息 $ git remote show [remote] # 增加一个新的远程仓库,并命名 $ git remote add [shortname] [url] # 取回远程仓库的变化,并与本地分支合并 $ git pull [remote] [branch] # 上传本地指定分支到远程仓库 $ git push [remote] [branch] # 强行推送当前分支到远程仓库,即使有冲突 $ git push [remote] --force # 推送所有分支到远程仓库 $ git push [remote] --all撤销# 恢复暂存区的指定文件到工作区 $ git checkout [file] # 恢复某个commit的指定文件到暂存区和工作区 $ git checkout [commit] [file] # 恢复暂存区的所有文件到工作区 $ git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 $ git reset [file] # 重置暂存区与工作区,与上一次commit保持一致 $ git reset --hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 $ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 $ git reset --hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和工作区不变 $ git reset --keep [commit] # 新建一个commit,用来撤销指定commit # 后者的所有变化都将被前者抵消,并且应用到当前分支 $ git revert [commit] 暂时将未提交的变化移除,稍后再移入 $ git stash $ git stash pop其他# 生成一个可供发布的压缩包 $ git archive
2021年08月29日
219 阅读
0 评论
0 点赞
2021-08-29
群晖DSM7.0安装transmission汉化和修改账号密码
首先下载安装包手动安装transmission,下载地址。安装完后默认是9091端口,在内网测试能否打开,能打开后在光猫里或者路由器里开端口转发,这样就可以在外网访问了。域名加端口(已开DDNS),但由于transmission只能http,所以https会打不开,这时可以采用群呼的反向代理解决。控制面板→登录门户→高级→反向代理服务器。开了反向代理后要在光猫或者路由器里打开代理端口,如图上的10001端口,设置好之后就可以打开https://域名:10001访问了。汉化下载汉化包下载地址下载1.6版本通过WinSCP连接DSM,注意得使用ROOT账户,不然看不到文件夹。Transmission的web控制台模板在/volume1/@appstore/transmission/share/transmission,直接把web重命名为web1,把汉化解压出来的web上传到这个位置。然后刷新下Transmission就可以看到汉化的界面了。如果提示要更新就去github上下载作者的1.6.1版本同样方法上传上去就好了。改用户名和密码改密码前得先去套件中心停用Transmission。DSM7.0文件夹位置更换了,不在以前的文件夹。SSH连接群晖(先去群晖上打开SSH连接)putty等软件都可以。同样得用root账户登录。vim /volume1/@appdata/transmission/settings.json将rpc-password后的密码删掉改成你的明文密码就可以保存退出了。去套件中心启动Transmission就可以用新密码登录了。
2021年08月29日
79 阅读
0 评论
0 点赞
2021-08-28
QT中.和::和:和->作用
在学习C++的过程中我们经常会用到.和::和:和->,在此整理一下这些常用符号的区别。1、A.B则A为对象或者结构体2、A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;3、::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构;4、:一般用来表示继承;
2021年08月28日
155 阅读
0 评论
0 点赞
2021-08-26
群晖Video Station刮削器使用指南
什么是刮削器或者搜刮器,又有什么作用呢?刮削器(也常被称为”web scrapers”),是一种专门自动从网络获取游戏、音乐、视频、电影、电视节目的数据信息(缩略图/海报/封面/原创或饭制作品)的软件。刮削器这种叫法总是让初学者感觉怪怪的,其实这种叫法是scrapers的英文直译,与“菜单”相类似。Video Station直译为视频工作站,顾名思义就是视频文件汇集整理播放的一个软件,NAS的本意不仅是存储数据,更要让你方便的使用数据。在日常生活中我们下载的电影电视剧文件的命名规则不统一,仅凭文件名称,我们其实也很难直观的辨别电影电视剧名称内容。而Video Station则为我们内置了刮削器,方便我们能迅速对视频文件进行预览。没使用刮削器前使用刮削器后最新版Video Station 2.4.9-1626支持TheTVDB和The Movie Database第三方刮削器原先Video Station自带的刮削器在大陆地区无法访问,原本还有安装豆瓣刮削器的方法也相继失效,在最新版Video Station中,群晖引入两个 TheTVDB 和 The Movie Database 第三方刮削器,但同样在大陆地区无法正常使用。好在 The Movie Database 刮削器通过修改域名解析可以实现正常访问,所以今天我们就来讲一下如何进行设置。不能访问的原因是TMDB使用的服务器IP网段与facebook、Twitter、Dropbox网段有重叠,被大陆屏蔽,只需要找到一台ip地址不在屏蔽范围的服务器就好了。The Movie Database 账号注册与 API 接口获取打开网站(https://www.themoviedb.org/)点击右上方的“加入TMDb”,注册账号并登陆。TMDB网站在大陆绝大多数地区都是可以正常访问,并且支持中文。大陆地区无法使用TDMB刮削器的原因是 api.themoviedb.org (TMDB的api接口服务器)在大陆地区域名解析异常。需要我们手动指定域名解析到的ip地址。在注册账号页面填写相关信息就可以完成注册。账号登陆以后账号后,点击右上方的账户头像,在弹出菜单中点击账户设置。在账户设置页面点击API选项申请API用户类型选择开发者接受开发者协议填写应用信息,这里的信息请使用拼音或者英语填写,每一个选项都需要写每个选项都填写完毕之后点击提交,提交完成之后就可以看到你的API,把那一串字符复制下来。复制下来的API密钥你粘贴到video station的设置选项中,点击测试连接,如果可以测试通过,说明你可以正常使用。点击确定,保存设置你就不需要进行下面的操作了,如果无法点击确定按钮,把“启用OpenSubtitles.org支持”这个勾去掉。如果测试不通过,在这里先点击确定,保存设置,我们还需要手动指定一下api服务器的域名解析。获取到 api.themoviedb.org 可以正常访问的ip地址我们使用到爱站ping检测工具,在检测框中我们输入网址点击检测,ping检测工具会自动调用分部在全球服务器对api.themoviedb.org 进行ping测试,测试同时服务器还会返回服务器所在地域名解析到的ip地址。在搜索结果中我们看到全国大多数地区都是无法访问的,我们在结果中去找那些检测结果不是超时的ip地址,我们把这些地址复制出来,在本地电脑上打开CMD命令行模式,然后输入ping XXX.XXX.XXX.XXX(这里的XXX表示的就是你复制的ip地址) 然后回车,如果返回时间,那么说明这个ip地址在你所在的地区可以是使用。如果显示超时,那么说明这个ip在你当地不能使用,那么你就需要继续去试下一个地址。 修改NAS的hosts文件首先我们需要在群晖控制面板中开始ssh的功能。在群晖的控制面板中你需要先开启高级模式高级模式开启以后点击“终端和SNMP”勾选启动“ssh功能”,点击应用。在电脑上安装finalshell这个软件,安装完成以后打开软件, 新建NAS的连接信息双击我们刚刚添加的连接信息,就会连接到我们的NAS上, 我们在窗口中输入 sudo -i然后回车,就会出现一个要求输入密码的界面。输入你的密码当命令行出现“#”以后输入 vi /etc/hosts输入完命令以后按回车键盘上按一下插入键 insert 就可以进入编辑界面,输入 XXX.XXX.XXX.XXX api.themoviedb.org (XXX.XXX.XXX.XXX 替换成上面所说的ip地址,)按一下esc键退出编辑输入 :wq 就可以退出保存 注意以上输入全部均是英文输入法状态下。编辑完成以后我们重启NAS。验证效果打开Video Station,进入设置–高级选项,我们点击“测试连接”,进行验证一下对于之前已经存到NAS里的视频可能需要你手动编辑一下文件信息,对于之后上传的文件如果刮削器可以找到对应视频文件会自动关联,当然也存在某些视频文件无法匹配的情况发生。 完。
2021年08月26日
263 阅读
0 评论
0 点赞
2021-08-25
随机图片API接口
免费API调用平台https://api.btstu.cn/https://unsplash.it/1600/900?random(据说国内加载略慢,我试了一下还好都差不多)https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture(必应每日图片)https://uploadbeta.com/api/pictures/random(必应图库,一些风景图人物图什么的,都是现代风格)https://source.unsplash.com/random(风格同上,但这个的图尺寸不是大图)下面是几个二次元的https://img.xjh.me/random_img.php (850+) 出处(・ω・)ノhttp://www.dmoe.cc/random.php(1000+)出处(・ω・)ノhttps://acg.yanwz.cn/api.php (400+) 出处(・ω・)ノhttps://img.paulzzh.tech/touhou/random (东方的随机图,43000+)出处(・ω・)ノhttps://acg.toubiec.cn/random.php(1000+) 出处(・ω・)ノ 作者开源了 这篇博客里有介绍和源码 先蟹蟹大佬了[项目]随机二次元图片API-已经开源必应壁纸1366*768分辨率图片地址:https://api.dujin.org/bing/1366.php1920*1080分辨率图片地址:https://api.dujin.org/bing/1920.php手机标准分辨率1080*1920图片地址:https://api.dujin.org/bing/m.php动漫图片https://api.ixiaowai.cn/api/api.phphttp://www.dmoe.cc/random.phphttps://api.ixiaowai.cn/mcapi/mcapi.phphttps://acg.yanwz.cn/wallpaper/api.phphttps://acg.yanwz.cn/api.phphttps://img.paulzzh.tech/touhou/randomhttps://i.xinger.ink:4443/images.phphttps://api.lyiqk.cn/acghttps://api.lyiqk.cn/mikuhttps://random.52ecy.cn/randbg.phphttps://img.catct.cn/mc.phphttps://img.catct.cnhttps://img.catct.cn/pixiv.phphttps://img.xjh.me/random_img.php?return=302风景类图片https://api.ixiaowai.cn/gqapi/gqapi.phphttps://api.lyiqk.cn/sceneryhttps://acg.yanwz.cn/scenery/api.php现代化图片https://source.unsplash.com/randomhttps://unsplash.it/1600/900?randomhttps://api.comzg.com/https://source.unsplash.com/user/erondu/1600x900https://source.unsplash.com/user/tkirkgoz/1600x900https://unsplash.it/1600/900?random美女写真https://api.lyiqk.cn/sexyladyhttps://api.lyiqk.cn/pureladyhttps://uploadbeta.com/api/pictures/random/?key=推女郎https://uploadbeta.com/api/pictures/random/?key=二次元https://uploadbeta.com/api/pictures/random/?key=动漫https://api.ixxcc.com/cosplay.php?return=imghttps://cdn.seovx.com/?mom=302
2021年08月25日
152 阅读
0 评论
0 点赞
2021-08-20
ESP8266 Serial.available()与Serial.read问题
ESP8266作为TCP服务端,电脑作为TCP客户端,单片机串口与ESP8266串口相连,目的是实现单片机与电脑客户端之间数据互传。 ```c uint8_t readBuf[256]; char readBuf_1[256]; int inComingBytes_1; while (client.connected()) //如果客户端处于连接状态 { //接收客户端数据转发给串口 int inComingBytes = client.available(); if(inComingBytes > 0){ client.read(readBuf, inComingBytes); Serial.write(readBuf, inComingBytes); } //接收串口数据转发给客户端 inComingBytes_1 = Serial.available(); delay(5);//解决方法 if(inComingBytes_1 > 0){ Serial.read(readBuf_1, inComingBytes_1); client.write(readBuf_1, inComingBytes_1); } } ```在利用ESP8266将串口数据与TCP数据互传时遇到问题,串口接收的数据不能一次发给TCP客户端,而是分为两次发送。如发送:49 60 00 35 00 00 15 7b 时。客户端收到的数据为49 60 00 35 00 00 15 7b 可以看到数据被分为两次发送了。后来经过了解后发现Serial.available()读取接收的数据字节数时并不是一次性读取的,而是逐渐累加的,每次累加一个字节,直至读完。 而当我们使用Serial.read读取时,每读取一个字节时,Serial.available()的累加值就会减一,这样就造成我们在利用以上代码时,当有数据接收时,Serial.available()为1时便立马进行读取,然后发送给客户端,这样就有了第一次发送一个字节的数据,而当第二次发送时,由于第一次发送数据时有一段时间的阻塞延时,所以Serial.available()被全部累加起来了,所以第二次就能把数据全部发送出去。 解决办法就是在接收到第一个字节时不立马发送,而是添加一段时间的延时,使Serial.available()累加完再一次发送。
2021年08月20日
127 阅读
0 评论
0 点赞
2021-05-17
基于ESP-12F的电脑远程开机模块
利用对电脑主板开机跳线电平的控制来控制电脑的开关机和重启等操作。接入Blinke平台,可以通过Blinker APP和小爱同学远程控制。 Arduino控制代码如下
2021年05月17日
68 阅读
0 评论
0 点赞
1
2
3
4
...
8