所有由罗佳(博主)发布的文章

esp32连接wifi触发wdt

之前碰到一个奇怪的问题,就是一调用 WiFi.begin() 就会整个板子卡住然后触发task wdt,也没别的报错什么的。

经过反复注释各种代码,最后终于发现是因为这一句 ets_update_cpu_frequency(240000000UL) ,这句是用来调整cpu频率的,注释掉了之后wifi就正常了。

后来发现是搞错了参数的单位,这里面填240就可以,单位就是Mhz,而不是hz。

esp8266 wifi小钟

这个小钟已经做好并运行了有1个月了,这也是我第一次用esp8266和arduino ide做的练手项目。目前连续工作测试稳定正常,并且它一直都是以当初拼装出来的姿态在工作,如图:

赛博朋克2020.jpg

这个小钟会在开机和每24小时后连接到windows的ntp服务器对时,mic检测到一定响度的声音后亮起屏幕,安静时10秒后关闭屏幕。本来我想用以前买的一个传感器包里的红外检测模块在检测到人的时候就亮屏的,但是它好像坏了,就用了声控方案。

继续阅读esp8266 wifi小钟

ESP8266 快速改变输出引脚状态

在Arduino中使用digitalWrite来设置引脚的高低电平其实并不只是做了改变引脚寄存器数据这一件事,所以它的效率并不高,在需要高频输出的场景下就会出现瓶颈。

最近我在写大型LED矩阵屏驱动板的时候就遇到了这样的情况,一轮loop的速度太慢以至于watch dog以为程序死循环了而导致重启。后来我查来查去发现可以通过直接改变寄存器的数据来改变引脚的输出电平,而且官方头文件里其实也有对应的宏可以进行相关操作,但我怎么试都没成功,最后在一个官方demo里发现了一个函数,效率也同样不错,所以抄出来记录一下

只要调用 __digitalWrite(gpio引脚,01) 就可以了。

 

==========更新===========

把这个函数写成宏可以更进一步提高效率

 

恢复bilibili右键菜单视频变速按钮

新版bilibili右键菜单去掉了原本的实用功能视频变速,加上了不常用的功能,音效设定也不知道是不是从ac抄来的。

现在没有右键变速后每次变速鼠标都要移动到播放器右下角的倍速上等待设定条出来再点击,而且底部控制栏有时候是会隐藏的,远没有视频上随处可点的右键菜单快捷,所以写了个油猴脚本又加回了这个功能,从0.5倍开始以0.25倍递增到2倍。

脚本地址:https://gist.github.com/JiaJiaJiang/c54abe1227917af3d3825dfa098b9473/raw/cbad28f7ee23a6e7d028a534330efc971b351c46/bilibiliContextMenuVideoRate.user.js

有Tampermonkey插件的可以直接点击上面的链接安装,没有的先安装插件。

WebGL2画球

本文演示的代码均在这里,本文仅说明原理,不会细化到webgl基础。

最近学会了用WebGL2画球,其实学会也有两个多月了,但由于某些误解一直没法生成正确的贴图映射,导致贴图错乱,直到两周前才突然开窍发现了原因,又拖到今天才来发这么一篇文章。忙里偷闲做事就是效率低下,好在并没有什么迫切需求要做,慢慢学也无所谓。

要用WebGL画球主要就是要先建个球模,然后给它上色或者贴图。要贴图就要搞清楚每个顶点和贴图的坐标映射关系,不同的球模类型映射关系也不一样,我这画的是最容易理解的经纬球,即以地球仪那种经纬线为线框的球体。

接下来开始我们的正题。

先摆一个随便找的经纬球

现在假装看不见经线(竖线),只能看见纬线(横线),那么这个球外面每隔一定的角度就绕着一个正圆,我们生成模型也可以用这种逻辑,首先生成一个正圆,然后把它按角度调整好大小并放到正确的位置上。关于生成一个合适边数的圆的方法我在前一篇文章已经写过了,这里就不再赘述了。

继续阅读WebGL2画球

画一个尽量圆的圆

在屏幕上绘制圆的时候实际上就是在画一个正多边形,只是边非常多而已。

这篇文章来水一个画多少边合适的问题。(注:我并不是不知道canvas2d有圆弧绘制函数,这是为下一篇文章准备的内容)

要一个圆的边看起来平滑,就需要边数足够多,直到在屏幕上看不出它有棱角就够了,这里摆一幅图。

继续阅读画一个尽量圆的圆

双8G加单16G双通道内存

原本我的电脑是两根8G阿斯加特内存插在两个通道各一个槽上组的双通道,最近发现有的时候不够用了,所以又买了一条16G的内存。

之所以这点破事也要写一篇文章,是因为这个过程里我一边调试一边蓝屏了十几次,觉得有必要记录一下。

这是原本的插法

现在是这个插法

两个通道上各凑满16G组成双通道32G

继续阅读双8G加单16G双通道内存

ParseError: ‘import’ and ‘export’ may appear only with ‘sourceType: module

首先这个错误是Browserify报出来的,看着网上一篇篇给babel加preset的解决方案让我一度以为这是babel出问题了。

但我按照那些方案依然不能解决这个问题,比如加stage-0,还有加es2015的preset之类的,另外现在这些preset已经被弃用了,官方推荐用preset-env来代替。而我手动加了commonjs的plugin也一样报错。

一番研究之后发现我其他所有es模块被引用都能正常打包,唯独node_module里面的一个模块的es6模块不能加载,看来Browserify是默认不允许node_module里的模块以es6格式输出模块的。所以解决方案是要么把文件从node_module里移出来,要么想办法让Browserify允许node_module以es6输出模块,我最后用的是前者,因为那个sourceType:module我怎么设置也依然没有效果。

PHP输出内容到控制台

有时候本地开发的时候会使用 php -S 命令启动一个服务器来调试,由于该web服务器模式直接echo会把内容输出到页面上,所以需要想办法把内容输出到控制台界面。

php里有几个 php:// 开头的特殊读写流可以使用,文档见此:https://www.php.net/manual/en/wrappers.php.php

虽然该页面上说有常量 STDIN STDOUT 和 STDERR ,但是不知道为啥使用它们会报错不存在常量,所以我们可以自己定义:

然后就可以定义自己的输出函数来输出到控制台了

 

Android设置壁纸后主屏幕死循环重启

我也不清楚这个问题是否具有普遍性,因为我这的具体情况是Pixel XL在Android 10下使用默认启动器,在用快图浏览内置的壁纸编辑器更改了几张壁纸后出现了这这样的情况。这次是我第二次碰到这个问题,而且每次都是被快图浏览搞出来的。上次我直接重刷系统了事了,但这次不想再花那么多时间来重新设置各种app所以尝试了一下解决问题,为了出现同样情况的人好找,也就把标题写得广一点了。 继续阅读Android设置壁纸后主屏幕死循环重启