以下是用于zvs142857SystemXccUpdate();远程更新函数:
Update=http://xccfriend.oss-cn-shenzhen.aliyuncs.com/upload/pc/2026-08-25/8d3fe8f4-5e0d-4250-8899-0d66a51fe597.zip
Update= http://xccfriend.oss-cn-shenzhen.aliyuncs.com/upload/pc/2026-08-25/8d3fe8f4-5e0d-4250-8899-0d66a51fe597.zip
固件更新(.BIN).zip在http://xccfriend.oss-cn-shenzhen.aliyuncs.com/upload/pc/2026-08-25/8d3fe8f4-5e0d-4250-8899-0d66a51fe597.zip
固件更新(.BIN).zip在 http://xccfriend.oss-cn-shenzhen.aliyuncs.com/upload/pc/2026-08-25/8d3fe8f4-5e0d-4250-8899-0d66a51fe597.zip
上次示波器能测试1KHz,这个V19.7的示波器稳定测试12KHz! 免编译代码直接烧录固件,开箱即用!
仪表模式的电阻测试优化,无需下拉电阻,A0和3.3V串联电阻即可测量(50K以下的电阻不能测,电阻越大精度越高)
1.示波器添加Auto模式
以前的示波器:

现在的示波器:
Auto模式
正弦波:


使用NE555的信号发生器,输出方波测试:
使用Auto模式测试方波:

因为摄像头拍摄OLED会屏闪,所以是这样
开启Auto模式后(按下AUTO/BACK按钮)右上角显示Auto字样,并自动放大/缩小波形,使波形占满整个屏幕,右下角显示频率,左上角显示电压V/mV(19.7新增mV,开启Auto模式支持测量mV)
这是一个STC芯片的Mini-DSO示波器,与这个19.7的示波器进行对比


这个STC/Mini-DSO的示波器,最低200µs(200µs/500µs/1ms/2ms/5ms/10ms/100ms/500ms)这个19.7是固定3µs,在3µs延迟显示波形,因为WiFi中断和I2C传输,实际可能有50µs,但是STM示波器200µs更卡顿
可以看到,Mini-DSO示波器显示正弦波时OLED有毛刺,且屏幕没有完全利用显示波形,我这19.7示波器的OLED虽然小,但是是全屏显示,并且自动调节大小,并且能显示mV,以前只能显示V,提高显示范围
V19.7的温度测试也优化了,无需热敏电阻,使用LM35作为输入,再使用MOSFET控制A0是否打开LM35,用于在时钟模式之外隔离A0
原理:当系统使用LM35时,拉高D0,此时D0为低电平转成高电平,MOSFET导通,PC817导通,此时A0从PC817获取LM35的温度
2.内存再次优化
1.使用PROGMEM节省内存,读取使用_p等函数
2.所有不变的数组全部在#define里面,也有的在PROGMEM里面,进一步节省SRAM
3.删除了无用的库:ArduinoJson.h :
4.删除了DNSServer.h
#include <ESP8266WiFi.h>
#include <U8g2lib.h>
#include <ESP8266WebServer.h>
#include <LwipDhcpServer.h>
#include <EEPROM.h>
#include <TimeLib.h>
#include <NtpClientLib.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#include <SimpleTimer.h>
#include <pgmspace.h>
#include <Wire.h>
#include <FS.h>
#include <zvs142857.h>
#include <lwip/napt.h> // WiFi NAT
extern "C" {
#include <user_interface.h>
bool wifi_softap_deauth(uint8_t *mac);
uint8 wifi_get_channel(void);
}
#if zvs142857_VERSION_MAJOR != 1 || zvs142857_VERSION_MINOR < 5
#error "This sketch requires zvs142857 library version 1.5.x or higher!"
#endif
3.Web页面增强
新增 /Settings 设置,所有Web页面暗色
一键切换 时钟/热点/CRACK/Beacon 模式,WiFi NAT,调节 OLED 亮度,修改热点 SSID/密码/信道,还能直接搜索更新、重启设备。
4. 仪表模式展示
zvs142857 System外观:

V4实物图:

旧版:




新版:



电阻测试,未接显示142857MR。现在连接一个330K:

显示331.92KΩ

5.WiFi Crack/BEACON增强


效果:



BEACON至少会发出160个SSID,在400pkts下,会超过500个SSID
BEACON平均380pkts,运行一段时间后平均300pkts,再过一段时间后稳定在275pkts左右
6.PCB设计
在电路板上,有示波器的输入口(示波器/电压表)都用这个输入,最大3.3V
电阻测试用正面的最大2个焊盘,且不能测试50K以下的电阻,50K以下电阻会显示0.01R。这是因为没有下拉电阻,此电路/固件不需要下拉电阻,而是使用PCB漏电的电阻作为下拉(PCB漏电电阻一定)
A0---测试电阻---3.3V,无需下拉电阻
A0和3.3V在正面最大2个焊盘上面
测试电流就短接A(BUTTON)端子
V3电路板:
V3有bug
PCB 版本:V3

V4电路板:

C3,C电容4容量一大一小,消除低频和高频信号,使VIN输入更加稳定



这次在PCB电阻那里添加了阻值(330K等)这样更方便焊接


IN为输入测量正极,另一边为负极,开关使用自锁开关,测量输入最大3.3V,否则会损坏ESP8266的ADC引脚
原本是用TPS61023DRLR的,结果发现输出0V,所以这次使用外接SX1308模块,在电路板背面右下角的焊盘,IN为SX1308模块输入,OUT是SX1308的输出。使用3.7v聚合物锂电池,850mAh以上的电池,充满电空载可以运行6小时,满载可以运行3小时
V4新版无需连接升压电路,直接连接BAT和GNDV2/V3的:如果不接升压模块,用导线短接VCC和OUT
背面右上角的IN OUT的接口,旁边标注了V/Ω/OSC,这个端子可以测电压,还能当示波器。但是不能测试电阻,测电阻可以在正面PCB那2个最大的焊盘测,更方便
原理图:

这里的充电电路为了简单,所以只使用了一个元器件:SS34二极管
所以,电池除了使用850mAh以上的,还必须使用有充电保护板的聚合物锂电池,这里使用的是 802540 850mAh的聚合物锂电池

7.烧录固件+配置WiFi
第一步:
烧录固件:
1.下载回来ESP8266 OLED V19.7.zip
2.解压文件
3.找到"软件"文件夹,里面有个ESP8266Flasher.exe
4.运行ESP8266Flasher.exe

如果只有COM1,说明ESP8266没有连接或者无法识别,此时下载回来附件的CH341SER.zip然后解压

里面只有一个程序,运行

然后点击"安装"按钮

这样就安装好了,重新连接ESP8266。
然后打开设备和打印机/设备管理器
出现USB-SERIAL CH340就可以了
5.选择新的端口
烧录视频SH1106(上传的bug终于修复了):
SSD1306:

6.点击Config

如果使用SH1106像上面的就可以,如果是SSD1306,点击右边齿轮图标选择这个固件:
ESP8266_OLED_V19.7_SSD1306_OLED.bin
7.点击Advanced

这样就配置好了
8.点击Operation,并选择合适的端口(这里是COM5)

9.点击Flash(F)按钮


等待进度跑满

像这样就完成了,重新连接ESP8266
第二步:
配置WiFi:
1.给8266连接电源
2.A0与3.3V短接(使A0电压大于1V)
3.屏幕出现:
SSID: ESP8266-WiFi
IP: 192.168.4.1
就可以连接了(开放网络)

4.浏览器输入(前缀是http://没有s):
http://192.168.4.1
进去后会看到WiFi页面,OLED右下角会有SCAN字样,扫描完成后SCAN字样会消失

新版:

新版旧版操作方法不变,只是新版的外观是暗色更现代
选一个WiFi,输入密码然后连接

这样就成功了
如果卡在Clock Mode,按下RST重启,密码已经保存
5.重新连接热点,热点名已经改变(从ESP8266-WiFi变为ESP8266)
连接SSID是'ESP8266'的热点,密码:'zvs142857'
ESP8266热点直接连接是有Internet访问的,无需设置DNS

8.硬件清单
ESP8266*1
面包板*1
SH1106 OLED *1
zvs142857 System V4:
ESP8266 NodeMCU*1
SSD1306 OLED*1
LM35DZ*1
PC817*1
3.7v&850mAh+*1
15P 2.54排母*2
一些电阻电容
……(在BOM里面有更多)
9.Web页面
新增页面/Settings
/Setting设置页面通过设置打开:
19.7新增/Setting设置页面:


Web页面:

那4个系统操作这里就不演示了
此页面可以远程上传.bin固件升级
旧版:

新版:

内存剩余:29KB/30048Bytes

RAM:29KB/30048Bytes,说明没有任何的内存泄漏!
新版:


新版:



新版:

因为页面太多了不能完全展示
内存依旧30048字节,说明没有内存泄漏,这绝对不是char的效果!而是PROGMEM的效果!!!
因为把全局char换成了PROGMEM和#define,函数内部一些char换成了String,所以内存提升了很多(其实函数内部使用string比char更好,char会永久占用SRAM,会让41%的占用变成60%以上,而且静态内存上升,运行时虽然char不会内存碎片和泄漏内存,原本29KB,使用char只有15KB,所以部分使用String更值得,而且String会自动释放。使用char不管局部还是全局、不管怎么修饰前缀(加了static也没用),都会占用SRAM,栈也是SRAM的一部分!这些函数必须使用String,否则容易内存不足!!!因为这些String的调用频率非常低,使用char就是在浪费SRAM!!!而且使用char容易爆堆,导致堆内存不足触发重启,请勿在此代码的那些函数的char换成String,因为浪费内存,而且一些库并没有上传导致无法编译)
SRAM(80KB/96KB)≠编译器计算剩余内存(58%剩余,41%占用)≠运行时内存剩余≠运行在时钟模式空闲内存29KB
Web不要使用String拼接,更不要使用更吃内存的char,使用PROGMEM,const int换#define
server.setContentLength(CONTENT_LENGTH_UNKNOWN);
server.send_P(200, PSTR("text/html; charset=utf-8"), PSTR(""));
server.sendContent_P(PSTR("<!DOCTYPE html><html><head><meta charset='UTF-8'>"));
server.sendContent_P(PSTR("……"));
10.编译日志
因为ESP8266的SRAM只有80KB,重要的是编译时的内存占用:
Executable segment sizes:
ICACHE : 32768 - flash instruction cache
IROM : 580728 - code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 29193 / 32768 - code in IRAM (IRAM_ATTR, ISRs...)
DATA : 1528 ) - initialized variables (global, static) in RAM/HEAP
RODATA : 2884 ) / 81920 - constants (global, static) in RAM/HEAP
BSS : 29944 ) - zeroed variables (global, static) in RAM/HEAP
项目使用614333字节(58%)的程序存储空间。最大值为1044464字节。
个全局变量使用34356个字节(41%)的动态内存,剩下47564个字节用于局部变量。最大值为81920字节。
==编译成功(用时 3m57s)==
SRAM只使用了41%,可用58%
IRAM使用率89%,正常,ESP8266WiFi库占82%,加上I2C,这个19.7持续运行5个月都不会重启
程序存储空间使用率58%,固件大小约604KB
静态内存占41%,可用58%,可用内存还比静态内存要多17%
固件更新(.BIN).zip内容是bin,只是附件不能上传bin文件,所以重命名为zip,此文件适配SSD1306固件,完整固件+源码在ESP8266 OLED V19.7.zip,Gerber_PCB1_2026-08-11.zip等是PCB文件


全部评论