ESP8266(NodeMCU) with ESPHome
下述内容对ESP32(NodeMCU)也适用, ESP32比ESP8266多了蓝牙功能也提供了更多IO口. 注意ESP8266与ESP32可以使用5V电源, 但是IO口输入输出建议不要高于3.3V.
ESP8266是一款集成了WiFi的单片机, 可以用C/Lua(NodeMCU)/Python(MicroPython)进行硬件编程.使用ESPHome可以在不编程的情况下对其进行设置(其实是写入ESPHome官方写好的针对各种ESP8266使用情景的程序).
ESPHome安装
OS: Deepin Linux 15.11 Desktop.
ESPHome基于Python, 可以用pip安装(也可以用Docker直接跑装好ESPHome的镜像).
sudo apt install python-pip
sudo pip install esphome
安装好后启动ESPHome会返回一个端口(6052), 将ESP8266(NodeMCU)用USB线连入电脑, 用浏览器进入即可可视化配置ESP8266.当然第一次上传好了ESPHome的固件后就可以通过局域网WiFi对ESP8266
Arduino Nano存储数据于EEPROM
Arduino等单片机运行时采集的数据大多在寄存器以及动态存储(“内存”)中, 掉电就会丢失. 为了保存这些数据, 需要将其保存到静态存储(“硬盘”/“SD卡”/…)中. Arduino Nano自带1kb的EEPROM, 掉电后其中数据不会丢失.
Arduino库中有头文件EEPROM.h, 其中定义了读写EEPROM的两个函数, 注意这两个函数只能对单字节数据进行读取, 而int占据了2个字节, long float double占据了4个字节乃至8个字节. 解决方法可以是直接读写每个字节的地址, 也可以使用共同体来进行转换.
#include<EEPROM.h>
EEPROM.begin(1024);
写操作EEPROM.write(address,byte); // address取0~1023(与EEPROM.begin对应, 不要大于硬件中EEPROM的容量)
读操作EEPROM.read(address); // address取0~1023(与EEPROM.begin对应, 不要大于硬件中EEPROM的容量)
字节数据转换示例使用地址long d;
uint
硬盘崩了及其修复
唠唠嗑最近有一大堆资料要看, 因为懒得每次关机开机后要重新打开这么多东西, 我开启了Deepin的休眠功能. 在休眠后的我又用Win10进入了自己的电脑, 删除了两系统共用的资料盘的部分内容. 再切回Deepin系统后, 发现Deepin竟然没有”更新”, 依然能够看到原该被删除的东西却无法打开, 但是却找不到Win10下新写入的文件. 然后我就又在Deepin里面”删除”了一遍那些文件(虽然一直报错). 等我切回Win10系统后, 发现那些在Deepin里没看到的内容又回来了, 但是资料盘中部分文件无法打开了.
所以下次记得不要用其它系统随便打扰休眠系统管控的硬盘!
解决方案
Win10系统.
利用Windows自带的chkdsk工具来修复硬盘及其上文件. 右键Win10的开始键, 打开powershell(管理员), 在其中输入:
chkdsk /f D:
其中f参数给chkdsk写入硬盘权限, 没有/f的话只会检查并返回硬盘有无错误却不修复, D:为出错的资料盘.
用立创EDA等制作双层PCB
本文不涉及PCB电路原理知识, 只是概述PCB从想法变成实物的过程(主要是EDA), 重点说明立创EDA的使用(这是国产EDA软件中目前唯一好用的软件). 立创EDA官网:https://lceda.cn/, 需要注册账号, 可以用在线版的(需要Chrome或者Firefox浏览器)或者下载客户端.
原理图绘制新建一个工程. 去开源平台搜索有没有与自己目标产品类似功能/线路的PCB, 有的话另存入我们的工程, 直接打开在其上修改, 没有的话新建原理图.
在左侧栏的元件库与立创商城中查找到自己需要用到的元件, 有需要的话可以右键查看规格书来查找其电气特性等. 在原理图中摆放好(快捷键R旋转). 对于从开源平台上copy来的原理图, 可以右键查找相似对象/修改器件. 随后按快捷键W布线, 按快捷键N添加网络标签(相同名称的网络标签是用导线连着的, 但是原理图中不会画出). 双击文字可以修改元件引脚说明或者网络表情的名称, 可以在电气工具处添加Vcc/Gnd等.
画完后Ctrl+S保存, 在上面菜单中选择原理图转PCB或者更新PCB.
PCB绘制
一般建议线宽与线距不小于10mil, 最
Book to Kindle
用Kindle看亚马逊商店里的书还好, 但是用它看网页上在线阅读的书籍或者txt格式的文档体验就不怎么样了.当然你可以直接在网上查找mobi格式的资源并下载, 但是资源毕竟没有这么好找(况且我们怎么可以这么Low呢!!).
我们可以换个思路, 将网页上的小说抓取出来, 自行生成mobi格式文档供Kindle享用.
OS: Deepin Linux 15.11 stable
抓取书籍内容前段时间随手翻到了一本叫《南宋第一卧底》的网文, 就用它来开开牙祭吧.
在度娘上搜索到了包含这本书的一个在线阅读网站, 其中这本书的网址为https://www.booktxt.com/20_20966/. 用wget递归下载下所有的章节页面.
wget -r https://www.booktxt.com/20_20966/\*
然后就发现wget要把整个网站都下下来… 如果发现wget下载的已经不是”20_20966/…”的网页, 那说明已经下载完当前书籍了, 直接中止下载.进入www.booktxt.com/20_20966/目录随便cat出一个网页的内容看看(比如cat index.html)
Arduino伪多线程时钟chrono
使用情景简介Chrono包用于在Arduino C代码中创建一个独立于主程序(setup()与loop())的计时器, 从而实现代码块的执行不受(少受)上游代码块的影响.
比如要不停得接收电脑发送的控制信息并更新LED闪烁频率/亮度, 电脑并不一定每个闪烁循环都发送信息, 而且发送的信息长度也可能不一样, Arduino读取信息所需要的时间也不一样. 这样事实上造成了LED闪烁的周期并不是我们delay()的时间, 而是随着串口发送信息的有无与数量不断变化. 此时可以用chrono代替delay(), 起到准确定时的功能.
安装进入Arduino Library(GNU/Linux系统常在~/Arduino/libraries), 下载解压好Chrono即可, 也可以用git.
git clone https://github.com/SofaPirate/Chrono.git
使用#include<Chrono.h>
Chrono chrono名; // 创建chrono定时器
chrono名.start; // 开始计时
chrono名.restart; // 重
cutecom串口调试工具
OS: Deepin Linux 15.11 Desktop
安装使用sudo apt install cutecom
开启cutecom后(命令cutecom)可以可视化地选择串口及其参数, 设定传输与接收数据的格式(几进制/字符与字符集), 并且可以指定文件传输/记录log.
Arduino串口操作Arduino的Serial是与USB口相连的串口, 可以直接与电脑通信, 而对于Arduino Leonardo等用相同MCU的板子, 在D0与D1处还有另外一对串口Serial1(将代码中的Serial替换为Serial1就可以控制它), 其余MCU的Arduino的D0与D1的串口与USB是相连的.
串口常用操作:
Serial.begin(波特率); // 开启串口
// 读
Serial.available(); // 返回0或1
Serial.readBytes(数组名,字节数); // 读取指定长度数据
Serial.read(变量名); // 读取一个字符
// 写
Serial.write(); //默认以二进制数字输出
Serial.print();
Ser
手机给电脑做触控板
最近找了一条HDMI线把电脑连到电视上享受大屏, 然而没有无线的键鼠控制电脑很不方便. 最近找到了一款对应的软件可以将手机模拟为键鼠操控电脑, 也算是一种不错的解决方案.
在http://wifimouse.necta.us/#download下载对应的手机/电脑端版本并安装. 我的系统是Deepin, 下载了Debian的mouse server, gdebi安装. 终端中输入mouseserver运行, 输出监听的端口1978, 用ufw放行sudo ufw allow 1978, ifconfig查看电脑IP并且输入手机app中(手机电脑在同一wifi下), 就可以连接, 然后就能使用了, 多指的触控手势也是支持的.
sudo apt update
sudo apt install -y ufw gdebi-core wget
cd ~/Downloads
wget http://wifimouse.necta.us/apk/mouseserver-64.deb
sudo gdebi mouseserver-64.deb
mouseserver
# 查找使用的端口
sudo uf
树莓派搭建百度网盘下载服务
没钱供百度网盘的会员, 下载网盘中的资源总是龟速, 又不忍心电脑常开. 既然如此就让比较便宜的树莓派代替它吧!
BaiduPCS Go安装配置
详见这篇微信推文.
去https://github.com/liuzhuoling2011/baidupcs-web/releases下载最新版本的BaiduPCS Go, 我用的是运行Raspbian的树莓派zero, 因此下载的是linux-arm版本(arm32位), 解压后找到的BaiduPCS-Go文件, 上传到树莓派中.然后chmod 755 /BaiduPCS/Go/文件路径来赋予之执行权限.
在/usr/local/bin中创建文件baidupcs, 同样sudo chmod 755 /usr/local/bin/baidupcs, 向其中写入:
/BaiduPCS/Go/文件路径 web --access > /dev/null &
其中web --access允许网络上的主机访问BaiduPCS Go, > /dev/null将原本输出到pty(我用ssh登录的)的程序日志重定向到null文件以删除之(
OpenSCAD初学/语法
入门建议
去http://www.openscad.org/downloads.html下载安装OpenSCAD.
要是会一点C就好了.
许多参数可以在最开始申明, 后面默认引用, 便于修改.
善用变量.
善用module name(){}组合打包位置需要微调实体.
接上, 可以用children()指代被控制的实体.
善用hull(){}给实体蒙皮.
用$fn参数增大弧形计算精度.
在函数前加#以高亮函数生成的实体, 便于观察调试.
用%隐藏实体.
在文件开头用use <...>引用其它文件中的module.
$vpr=[,,]设定初始视角.
基础实体创建基础实体函数
如果没有translate(), 实体生成起始点为[0,0,0], 没有center=true的参数的话起始点不一定为实体中心.
import(“path to stl files”)导入文件为实体.
二维square(x)或者square([x,y])从起始点向x/y轴正方向构建正方形或者长方形.
polygon(points=[[x1,y1],[x2,y2],…])circle(r)以起始点为圆心构