esp8266 wifi小钟

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

赛博朋克2020.jpg

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

继续阅读esp8266 wifi小钟

ESP8266 快速改变输出引脚状态

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

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

void ICACHE_RAM_ATTR __digitalWrite(uint8_t pin, uint8_t val) {
  if(pin < 16){
    if(val) GPOS = (1 << pin);
    else GPOC = (1 << pin);
  } else if(pin == 16){
    if(val) GP16O |= 1;
    else GP16O &= ~1;
  }
}

只要调用`__digitalWrite(gpio引脚,0或1)` 就可以了。

 

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

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

//pin最好为常数,以便编译器优化掉判断
#define __digitalWrite(pin,val)\  
	if(pin < 16){\
		if(val) GPOS = (1 << pin);\
		else GPOC = (1 << pin);\
	} else if(pin == 16){\
		if(val) GP16O |= 1;\
		else GP16O &= ~1;\
	}

 

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

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

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

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

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