找到
371
篇与
程潇
相关的结果
- 第 27 页
-
Oxygen Builder v4.0.2 它来啦,终极wordpress建站工具 lbpx4h59.png图片 设计任何你能想象到的东西 lbpx5520.png图片 为您的整个网站提供强大的视觉编辑 拖放编辑 拖动元素边缘以设置间距,或拖放以重新排序。 WooCommerce 获得对 WooCommerce 商店每个部分的视觉控制。 标题生成器 直观地创建自定义网站标题,包括粘性和覆盖标题。 全局颜色 在一处编辑颜色。更改会在使用颜色的任何地方生效。 开发者友好 使用基本的 HTML 元素构建。实时编写 PHP、CSS 和 JS。 高级功能 灵活的构建器元素。带有中继器和循环的动态数据。和更多。 让它美化所需的一切 粘性标题、覆盖标题和完全响应式控制。氧气很容易 响应式控制 在某些设备上隐藏或显示元素。跨四个媒体查询和桌面自定义布局、间距、颜色和所有其他 CSS 设置。 直观地使用 Flexbox 和 CSS 网格 使用 CSS flexbox 和 CSS 网格的可视化控件完全控制对齐、间距和布局——这是创建布局和响应式设计的绝佳方式。 滚动动画 从 Animate on Scroll 库中选择 27 种有品位的动画类型,让您的页面栩栩如生 - 没有弹跳、弹响或其他俗气效果等垃圾。控制动画时间、延迟、触发时间等。 自定义字体 使用来自 Google 的任何字体,或使用 Adobe Fonts 为您的页面提供“设计师”风格。您还可以使用 ECF 上传您自己的自定义字体文件。 自定义图标集 使用 IcoMoon 或 Oxygen 随附的免费 LinearIcons,或上传您自己的 SVG 格式自定义图标字体。 过滤器 跳过 Photoshop 并使用 CSS 过滤器的强大功能在 Oxygen 中更直接地调整模糊、亮度、对比度、饱和度等。 变换 使用 Oxygen 的 CSS 变换视觉控件实现令人难以置信的旋转、缩放和 3D 效果。图层变换并将它们与悬停状态相结合,以创建惊人的鼠标悬停效果。 类和状态 通过使用类同时设置多个元素的样式来节省时间。对类的调整会立即在任何使用它的地方生效——无需重复复制和粘贴样式。 条件 将显示条件应用于氧气中的几乎任何元素。无需一行代码即可轻松创建复杂的、基于逻辑的布局。 需要更多条件?使用我们简单的 API 添加您自己的。 链接: https://pan.baidu.com/s/1bEjrtNIgSlae--u-PIHPBA?pwd=eo4s 提取码: eo4s oxygen-4.0.2-破解版 下载地址:https://neictop-1256272185.cos.ap-guangzhou.myqcloud.com/2022/12/16/1671202447.zip 提取码: -
ESP8266 蓝牙打卡 #include "BLEDevice.h" #include "BLEUtils.h" #include "esp_sleep.h" #ifdef __cplusplus extern "C" { #endif uint8_t temprature_sens_read(); //uint8_t g_phyFuns; #ifdef __cplusplus } #endif BLEAdvertising *pAdvertising; uint8_t bleMac[6] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; // 0-30 前31组 uint8_t bleRaw[] = {0x02,0x01,0x06,0x17,0xFF,0x00,0x01,0xB5,0x00,0x02,0x25,0xEC,0xD7,0x44,0x00,0x00,0x01,0xAA,0x91,0x77,0x67,0xAF,0x01,0x10,0x00,0x00,0x00,0x03,0x03,0x3C,0xFE}; // 如果复制出来的raw超过31组 那么把它改为true并维护下面的数组 boolean rawMoreThan31 = false; // 31-end uint8_t bleRaw32[] = {0x0C,0x09,0x52,0x54,0x4B,0x5F,0x42,0x54,0x5F,0x34,0x2E,0x31,0x00}; void setup() { Serial.begin(115200); // esp32没有提供设置蓝牙mac地址的api 通过查看esp32的源代码 // 此操作将根据蓝牙mac算出base mac if (UNIVERSAL_MAC_ADDR_NUM == FOUR_UNIVERSAL_MAC_ADDR) { bleMac[5] -= 2; } else if (UNIVERSAL_MAC_ADDR_NUM == TWO_UNIVERSAL_MAC_ADDR) { bleMac[5] -= 1; } esp_base_mac_addr_set(bleMac); // 初始化 BLEDevice::init(""); // Create the BLE Server // BLEServer *pServer = BLEDevice::createServer(); // <-- no longer required to instantiate BLEServer, less flash and ram usage pAdvertising = BLEDevice::getAdvertising(); // 设备信息设置成空白的 BLEAdvertisementData oScanResponseData = BLEAdvertisementData(); pAdvertising->setScanResponseData(oScanResponseData); // 里面有个 m_customScanResponseData = true; 和 m_customScanResponseData = true; 所以只能先随便设置一下 BLEAdvertisementData oAdvertisementData = BLEAdvertisementData(); pAdvertising->setAdvertisementData(oAdvertisementData); // 简单粗暴直接底层api重新设置一下抓到的raw esp_err_t errRc = ::esp_ble_gap_config_adv_data_raw(bleRaw, 31); if (errRc != ESP_OK) { Serial.printf("esp_ble_gap_config_adv_data_raw: %d\n", errRc); } // 超过31 if (rawMoreThan31) { errRc = ::esp_ble_gap_config_scan_rsp_data_raw(bleRaw32, sizeof(bleRaw32)); if (errRc != ESP_OK) { Serial.printf("esp_ble_gap_config_scan_rsp_data_raw: %d\n", errRc); } } pAdvertising->start(); } void loop() { // 闪灯灯 Serial.println("Sparkle"); delay(1000); // 20分钟去待机避免忘了关 if (millis() > 1200000) { esp_deep_sleep_start(); } } -
利用ESP8266-12E破解钉钉WIFI打卡 钉钉越来越普及,大量的公司都在采用钉钉,同时,使用钉钉的考勤方式。 钉钉打卡方式存在一个WIFI打卡模式,需要连接指定WIFI进行打卡,识别的方式是WIFI的名称和MAC地址, ESP8266-12E是安信可官方推出的wifi模组,可以自建AP,同时还可以修改mac地址,所以就试了试使用ESP8266自建的AP来破解打卡,完美破解。 下面试破解的代码,用的arduino开发的,arduino如何安装,可看我另外一篇文章: Arduino-IDE搭建ESP8266开发环境 Arduino-IDE搭建ESP8266开发环境 代码是复制的太极创客8266 AP模式的代码,增加了设置mac地址 #include <ESP8266WiFi.h> #define AP_ssid "XXXXXXXX" //这里改成公司的WIFI名称 #define password "XXXXXXXX" //密码随便,一样不一样都行 uint8_t macAddr[6] = {0x00,0x00,0x00,0x00,0x00,0x00}; //改成公司的路由器mac地址 bool flag; void setup() { // 启动串口通讯 Serial.begin(9600); Serial.println(); //设置为接入点模式 WiFi.mode(WIFI_AP); //启动AP,并设置账号和密码 Serial.printf("设置接入点中 ... "); //启动校验式网络(需要输入账号密码的网络) WiFi.softAP(AP_ssid, password); //监控状态变量result flag = WiFi.softAP(AP_ssid, password); if (flag) { Serial.println(""); // 通过串口监视器输出信息 Serial.print("当前工作模式:"); // 告知用户设备当前工作模式 Serial.println(WiFi.getMode()); Serial.print("接入点名字:"); Serial.println(AP_ssid); // 告知用户建立的接入点WiFi名 Serial.print("接入点密码:"); Serial.println(password); // 告知用户建立的接入点WiFi密码 Serial.println("接入点模式成功开启"); //不输入参数获取MAC地址 //Serial.printf("MAC地址为 %s\n", WiFi.softAPmacAddress().c_str()); //输入参数获取MAC地址 //WiFi.softAPmacAddress(macAddr); wifi_set_macaddr(SOFTAP_IF, macAddr); delay(1000); WiFi.softAPmacAddress(macAddr); Serial.printf("MAC地址为 %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); } else { //若没有开启成功 Serial.println("开启失败"); } Serial.println("初始化结束"); } void loop() {} -
Arduino-IDE搭建ESP8266开发环境 一. 下载Arduino和ESP8266的开发板安装包 下载地址: 链接: https://pan.baidu.com/s/1x40Vm3G0n5HuBgjkc3OwZQ?pwd=xamc 提取码: xamc 下载后共有两个文件:arduino-1.8.15-windows.zip是Arduino的安装包,8266_package_3.0.1_arduino.cn是ESP8266的开发板安装包,从软件直接下载,因为是国外的服务 器,速度非常慢,所以这里直接提供 二. 安装Arduino 1.右键 arduino-1.8.15-windows.zip ,点击解压文件 lbeoxjr8.png图片 2.解压后双击arduino-1.8.15-windows.exe,用户账户控制,点击按钮是 lbeozhgl.png图片 3.点击按钮:I Agree 4.点击Next 5.点击Broesw,选择合适的路径,然后点击Install进行安装 6.等待安装完成,过程中会弹出如下图所示驱动安装点击按钮:安装。应该是共三个 7.安装完成,点击按钮Close 二. 安装开发板安装包 双击8266_package_3.0.1_arduino.cn,开发板安装包会自动完成安装 三. Arduino配置 1.双击Arduino图标打开软件 2.点击文件,点击首选项 3.开发板管理器地址输入:http://arduino.esp8266.com/stable/package_esp8266com_index.json,点击按钮好 4.依次选择:工具->开发板:”Arduino Uno”->ESP8266 Boards(3.0.1),然后选择对应的开发板,因为我这边用的NodeMCU,所以我选择了:NodeMCU 1.0(ESP-12E Module). 到这里开发环境就配置好了。 -
利用ESP8266制作钉钉WIFI打卡神器升级版 之前研究的一版破解WiFi打卡的工具,但是WIFI名称、密码、MAC地址全部写死在程序里了,改动需要修改代码重新下载。升级了下网页配置功能 利用自己之前学的一点html知识,结合做前端朋友的帮助,写了一个配网页面,配置时,会对密码和MAC地址进行校验,密码长度必须超过8位或者不输入,MAC先进行格式校验,后对每两个数据进行十六进制校验,通过后,修改所有参数,通过EEPROM库将数据保存在flash。然后重启设备,重新启动后读取配置信息,开启AP并修改MAC地址 下面是最新版的代码,有需要的可以自己下载arduino,买个ESP8266-12F模块,下载进去即可使用 #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <EEPROM.h> //首页html const char* home_page_str = "<html>\n <head>\n <meta charset=\"utf-8\" name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n <title>配置页面</title>\n <script src=\"config.html\" type=\"text/javascript\" charset=\"utf-8\"></script>\n <style>\n .formBox{\n width: 100%;\n float: left;\n margin: 0 auto\n }\n .formBox > form {\n width: 80%;\n margin: 0 auto;\n }\n form > input{\n width: 100%;\n height: 40px;\n }\n </style>\n </head>\n <body>\n <div align=\"center\">\n <h1>欢迎使用WIFI打卡神器</h1>\n \n </div><br><br>\n <div align=\"center\" class=\"formBox\">\n <form action=\"/result.html\">\n <h3>WIFI名称:</h3>\n <input type=\"text\" name=\"ssid\" value=\"\" required><br>\n <h3>WIFI密码:</h3>\n <input type=\"text\" name=\"password\" value=\"\"><br>\n <h3>MAC地址:</h3>\n <input type=\"text\" name=\"mac\" value=\"\" required><br>\n <input type=\"submit\" style=\"margin-top: 30px; font-size: 20px;\" value=\"配置\">\n </form> \n </div>\n </body>\n <script>\n \n let {mac,password,ssid} = config;\n document.getElementsByName('mac')[0].value = mac || '';\n document.getElementsByName('password')[0].value = password || '';\n document.getElementsByName('ssid')[0].value = ssid || '';\n \n \n </script>\n</html>"; //定义配置类型 typedef struct { unsigned char Default_Tag;//默认标记 char stassid[32];//定义WIFI名称 char stapsw[64];//定义WIFI密码 uint8_t mac[6]; //定义mac地址 }config_type; //定义默认配置 config_type const Default_Config = { .Default_Tag = 254, .stassid = "www.dzahz.cn\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", .stapsw = {'\0'}, .mac = {0x44,0x55,0xC4,0x37,0xB9,0xC0} }; config_type config; //配置信息 ESP8266WebServer server(80); void setup() { // 启动串口通讯 Serial.begin(115200); Serial.println(); Serial.printf("设置接入点中 ... "); //读取WIFI配置 loadConfig(); if(config.Default_Tag != Default_Config.Default_Tag) //判断是否初始化配置 { config = Default_Config; saveConfig(); } Serial.printf("ssid:%s\n",config.stassid); Serial.printf("pasword:%s\n",config.stapsw); Serial.printf("mac:%x:%x:%x:%x:%x:%x\n",config.mac[0],config.mac[1],config.mac[2],config.mac[3],config.mac[4],config.mac[5]); //启动AP delay(500); wifi_set_macaddr(SOFTAP_IF, config.mac); delay(500); WiFi.mode(WIFI_AP); if(config.stapsw[0] == '\0') WiFi.softAP(config.stassid, NULL); else WiFi.softAP(config.stassid, config.stapsw); //设置wedserver回调 server.on("/",HTTP_GET, homepage); server.on("/result.html",HTTP_GET, config_result); server.on("/config.html",HTTP_GET, query_par); server.onNotFound(handleNotFound); //启动服务 server.begin(); } //十六禁止格式判断,传输数据指针 bool hex_jud(char *str) { if((str[0] > '9') || (str[0] < '0')) //一个如果不是数字,则判断是否是A-F { if((str[0] > 'F') || (str[0] < 'A')) { if((str[0] > 'f') || (str[0] < 'a')) { return false; } } } if((str[1] > '9') || (str[1] < '0')) //一个如果不是数字,则判断是否是A-F { if((str[1] > 'F') || (str[1] < 'A')) { if((str[1] > 'f') || (str[1] < 'a')) { return false; } } } return true; } /**************************************** *函数名称:saveConfig *函数功能:保存配置信息 *输入参数:无 *输出参数:无 *备 注: *****************************************/ void saveConfig() //保存配置函数 { EEPROM.begin(1024); //申请1024的内存 配置保存在前256 uint8_t *p = (uint8_t *)(&config); for (int i = 0; i < sizeof(config); i++) { EEPROM.write(i, *(p + i)); } EEPROM.commit(); } /**************************************** *函数名称:loadConfig *函数功能:读取配置信息 *输入参数:无 *输出参数:无 *备 注: *****************************************/ void loadConfig() { EEPROM.begin(1024); uint8_t *p = (uint8_t *)(&config); for (int i = 0; i < sizeof(config); i++) { *(p + i) = EEPROM.read(i); } EEPROM.commit(); } //acsii转十六进制格式 uint8_t acsii_hes(char *str) { uint8_t h; uint8_t l; if((str[0] <= '9') && (str[0] >= '0')) h = str[0] - '0'; else if((str[0] <= 'F') && (str[0] >= 'A')) h = str[0] - 'A' + 10; else if((str[0] <= 'f') && (str[0] >= 'a')) h = str[0] - 'a' + 10; if((str[1] <= '9') && (str[1] >= '0')) l = str[1] - '0'; else if((str[1] <= 'F') && (str[1] >= 'A')) l = str[1] - 'A' + 10; else if((str[1] <= 'f') && (str[1] >= 'a')) l = str[1] - 'a' + 10; return (h << 4) | l; } //自定义主页访问处理函数 void homepage() { server.send(200, "text/html", home_page_str); Serial.println("用户访问了主页"); } //查SSID接口 void query_par() { char str[256]; sprintf(str,"const config = {\"ssid\":\"%s\",\"password\":\"%s\",\"mac\":\"%2X:%2X:%2X:%2X:%2X:%2X\"}",config.stassid,config.stapsw,config.mac[0],config.mac[1],config.mac[2],config.mac[3],config.mac[4],config.mac[5]); server.send(200, "text/html", str); } //查WIFI密码接口 void read_stapsw() { server.send(200, "text/plain", config.stapsw); } //查mac接口 void read_mac() { char str[50]; sprintf(str,"%2X:%2X:%2X:%2X:%2X:%2X",config.mac[0],config.mac[1],config.mac[2],config.mac[3],config.mac[4],config.mac[5]); server.send(200, "text/plain", str); } //配置接口 void config_result() { char ssid[32]; char password[64]; char mac[64]; char str[512]; int len; int i; //取出所有信息 sprintf(ssid,"%s",server.arg("ssid").c_str()); sprintf(password,"%s",server.arg("password").c_str()); sprintf(mac,"%s",server.arg("mac").c_str()); Serial.printf("ssid:%s\n",ssid); Serial.printf("pasword:%s\n",password); Serial.printf("mac:%s\n",mac); //校验密码长度 len = strlen(password); if((len < 8) && (len != 0)) { sprintf(str,"<html><meta charset=\"utf-8\"><body><p>密码长度错误,长度:%d<b></body></html>",len); server.send(200, "text/html",str); return; } //校验MAC格式 len = strlen(mac); Serial.printf("maclen:%d\n",len); if(len != 17) //校验总长度 { server.send(200, "text/html","<html><meta charset=\"utf-8\"><body><p>mac格式错误<b></body></html>"); return; } for(i = 0; i < 5; i++) //校验: { Serial.printf("mac:%d\n",mac[i*3+2]); if(mac[i*3+2] != ':') { server.send(200, "text/html","<html><meta charset=\"utf-8\"><body><p>mac格式错误<b></body></html>"); return; } } for(i = 0; i < 6; i++) //校验是否十六进制 { if(hex_jud(&mac[i*3]) == false) { server.send(200, "text/html","<html><meta charset=\"utf-8\"><body><p>mac格式错误<b></body></html>"); return; } } //保存信息 len = strlen(ssid); for(i = 0; i < 32; i++) //先清除原有配置 config.stassid[i] = 0; for(i = 0; i < len; i++) config.stassid[i] = ssid[i]; len = strlen(password); for(i = 0; i < 32; i++) //先清除原有配置 config.stapsw[i] = 0; for(i = 0; i < len; i++) config.stapsw[i] = password[i]; for(i = 0; i < 6; i++) //十六进制 { config.mac[i] = acsii_hes(&mac[i*3]); } saveConfig(); server.send(200, "text/html", "<html><meta charset=\"utf-8\"><body><p>设置成功,设备重启<b></body></html>"); delay(500); system_restart(); //复位 } // 设置处理404情况的函数'handleNotFound' void handleNotFound() { // 当浏览器请求的网络资源无法在服务器找到时, server.send(404, "text/plain", "404: Not found"); // NodeMCU将调用此函数。 } void loop() { //监听客户请求并处理 server.handleClient(); } -
ESP32C3刷固件,清除Flash lb3sxzcb.png图片 打开烧录软件,按下图选择,点 OK lb3syion.png图片 如图,出现固件和地址选项,在 combine 文件夹下有四种 .bin 可以选择 lb3sz8d5.png图片 点 START,出现 等待上电同步 时长按 BOOT lb3szl0k.png图片 此时出现下载中,待进度条走动,可松开 BOOT 键 lb3t00gc.png图片 等待烧写完成后,按 RST 键即可 lb3t0cr4.png图片 烧录器、固件下载: 下载地址:https://neictop-1256272185.cos.ap-guangzhou.myqcloud.com/2022/11/30/1669821489.zi 提取码: -
EPS8266刷固件,清除Flash 关于使用Arduino给8266烧录程序后,8266无法使用AT指令,刷固件教程 由于之前使用8266的时候,用过Arduino烧录过程序,导致无法使用AT指令集,本文将带给大家最详细的清除Flash的教程,学不会你顺着网线来找我。 在写文章之前,已经踩过很多雷了,在网上一搜如何清除Flash的时候,大多数都是使用Python,既不方便使用,也不易操作。其实安信可官方网站已经有提供了相应的固件清除程序。 下载: https://docs.ai-thinker.com/esp_download lb3shysm.png图片 lb3si8qk.png图片 在页面找到这两个,下载烧录软件和 文件。 文件在页面的最下方。 下载完成解压后 找到这个ESP_DOWNLOAD_TOOL_V2.4.exe执行文件 打开它 使用: 1.选择ESP8266 lb3silav.png图片 2.根据我所示的图片修改为以下的配置 lb3sj5os.png图片 根据这个顺序找到相应的烧录文件填写入Download Path Config 这里需要根据你自己不同的8266芯片的FLASH选择不同的FLASH的大小 路径的地方选择下载的Ai-Thinker_ESP8266_DOUT_8Mbit_v1.5.4.1-a_20171130_bin文件的路径 地址写0x00000 下面的COM端口号,根据自己电脑选择,波特率设置为115200 设置好之后,点start,烧录完成会出现FINISH即完成。 这样就擦除了8266的FLASH,AT指令集可以正常使用。 软件和固件打包下载: 下载地址:https://neictop-1256272185.cos.ap-guangzhou.myqcloud.com/2022/11/30/1669821489.zip 提取码: