﻿{"id":511,"date":"2024-03-30T22:53:12","date_gmt":"2024-03-30T14:53:12","guid":{"rendered":"https:\/\/3dok.biz\/wordpress\/?p=511"},"modified":"2024-04-01T13:06:22","modified_gmt":"2024-04-01T05:06:22","slug":"esp32-%e8%88%87-winbond-w25q128jv-%e4%b8%b2%e5%88%97%e5%bf%ab%e9%96%83%e8%a8%98%e6%86%b6%e9%ab%94","status":"publish","type":"post","link":"https:\/\/3dok.biz\/wordpress\/?p=511","title":{"rendered":"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"511\" class=\"elementor elementor-511\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6c85378 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6c85378\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8e2d9ef\" data-id=\"8e2d9ef\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5e6f687 elementor-widget elementor-widget-text-editor\" data-id=\"5e6f687\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><\/p>\n<p><a href=\"https:\/\/forum.arduino.cc\/t\/esp32-and-winbond-w25q128jv-serial-flash-memory\/861315\" target=\"_blank\" rel=\"noopener\">https:\/\/forum.arduino.cc\/t\/esp32-and-winbond-w25q128jv-serial-flash-memory\/861315<\/a><\/p>\n<p><\/p>\n<p><span><br><\/span><\/p><p><span>\u900f\u904e\u7bc4\u4f8b\u7a0b\u5f0f\u78bc\uff08\u5728\u8a0a\u606f\u672b\u5c3e\u65b0\u589e\uff09\uff0c\u5b83\u53ef\u4ee5\u5728 Arduino Nano IoT 33 \u4e0a\u6b63\u5e38\u5de5\u4f5c\uff0c\u4f46\u5728 esp32 \u4e0a\u6211\u770b\u4e0d\u5230\u6a94\u6848\u6216\u5beb\u5165\u4efb\u4f55\u5167\u5bb9\u5230\u6676\u7247\u3002<\/span><br><span>\u7576\u50b3\u56de\u80fd\u5920\u5beb\u5165\u7684 maxfiles \u70ba 0 \u6642\uff0cSerialFlash.create() \u51fd\u6578\u4f3c\u4e4e\u5931\u6557\u4e86\u3002<\/span><br><span>\u6709\u4ec0\u9ebc\u60f3\u6cd5\u55ce\uff1f<\/span><br><span>\u8b1d\u8b1d<\/span><br><span>\u9019\u662f\u7bc4\u4f8b\u7a0b\u5f0f\u78bc\uff1a<\/span><\/p>\n<p><\/p>\n<p><span><br>#include &lt;SerialFlash.h&gt;<br>#include &lt;SPI.h&gt;<br><br>const int FlashChipSelect = 4; <br><br>void setup(){<br><br>&nbsp; Serial.begin(115200);<br>&nbsp; delay(3000);<br>&nbsp; Serial.println(&#8220;SPI Flash&#8221;);<br>&nbsp; <br>&nbsp; if (!SerialFlash.begin(FlashChipSelect)) {<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8220;Unable to access SPI Flash chip&#8221;);<br>&nbsp;&nbsp;&nbsp; while(1){}<br>&nbsp; }<br>&nbsp; <br>}<br><br>void loop(){<br><br>&nbsp; \/\/ MAIN MENU<br>&nbsp; Serial.println(&#8220;&#8221;);<br>&nbsp; Serial.println(&#8220;&#8221;);<br>&nbsp; Serial.println(&#8220;SerialFlash Read and Write&#8221;);<br>&nbsp; Serial.println(&#8220;(switch your terminal to no line endings)&#8221;);<br>&nbsp; Serial.println(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#8220;);<br>&nbsp; Serial.println(&#8220;1) Create a new file&#8221;);<br>&nbsp; Serial.println(&#8220;2) Open a file&#8221;);<br>&nbsp; Serial.println(&#8220;3) Delete a file&#8221;);<br>&nbsp; Serial.println(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#8220;);<br>&nbsp; Serial.println(&#8220;Select a number&#8221;);<br>&nbsp; while(!Serial.available()){}<br>&nbsp; char choice = Serial.read();<br>&nbsp; while(Serial.available()){Serial.read();}<br><br>&nbsp; switch(choice){<br><br>&nbsp;&nbsp;&nbsp; case &#8216;1&#8217;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newFile();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; case &#8216;2&#8217;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; openFile();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; case &#8216;3&#8217;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deleteFile();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(&#8220;Invalid Selection&#8221;);<br>&nbsp;&nbsp; &nbsp;<br>&nbsp; }<br>&nbsp; <br>}<br><br>\/* Create a new file<br>&nbsp;* <br>&nbsp;* Request filename up to 20 chars<br>&nbsp;* Request a size up to 256 bytes<br>&nbsp;* Request some contents<br>&nbsp;* Create a file<br>&nbsp;*\/<br>void newFile(){<br><br>&nbsp; Serial.println(&#8220;Enter a filename&#8221;); \/\/ Request filename from user<br>&nbsp; while(!Serial.available()){} \/\/ Wait for user<br><br>&nbsp; char filename[20] = {}; \/\/ buffer to store user filename<br>&nbsp; Serial.readBytesUntil(&#8216; &#8216;, filename, 20);<br>&nbsp; while(Serial.available()){Serial.read();}<br><br>&nbsp; Serial.println(&#8220;Enter a filesize in bytes&#8221;); \/\/ Request file size from user<br>&nbsp; while(!Serial.available()){} \/\/ Wait for user<br><br>&nbsp; char sizeArray[3] = {}; \/\/ buffer to store requested file size<br>&nbsp; Serial.readBytesUntil(&#8216; &#8216;, sizeArray, 3);<br>&nbsp; while(Serial.available()){Serial.read();}<br>&nbsp; int filesize = atoi(sizeArray); \/\/ Convert char array to int (i.e. &#8220;40&#8221; to 40) <br><br>&nbsp; if(SerialFlash.create(filename, filesize)){ \/\/ Returns false if file already exists<br><br>&nbsp;&nbsp;&nbsp; SerialFlashFile file; \/\/ Open the file we just created for writing<br>&nbsp;&nbsp;&nbsp; file = SerialFlash.open(filename);<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8220;Write some file contents:&#8221;); \/\/ Request file contents from user<br>&nbsp;&nbsp;&nbsp; while(!Serial.available()){} \/\/ Wait for user<br><br>&nbsp;&nbsp;&nbsp; char contents[256] = {}; \/\/ buffer to store file contents<br>&nbsp;&nbsp;&nbsp; Serial.readBytesUntil(255, contents, 256);<br>&nbsp;&nbsp;&nbsp; while(Serial.available()){Serial.read();} \/\/ Empty read buffer<br>&nbsp;&nbsp;&nbsp; file.write(contents, filesize); \/\/ Write the contents buffer<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8220;&#8221;);<br>&nbsp;&nbsp;&nbsp; Serial.print(&#8220;New file &#8220;);<br>&nbsp;&nbsp;&nbsp; Serial.print(filename);<br>&nbsp;&nbsp;&nbsp; Serial.print(&#8221; created with size &#8220;);<br>&nbsp;&nbsp;&nbsp; Serial.print(filesize);<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8221; bytes!&#8221;);<br>&nbsp; }else{<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8220;&#8221;);<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8220;There was an error creating this file (does it already exist?)&#8221;);<br>&nbsp; }<br><br>&nbsp; return;<br>&nbsp; <br>}<br><br>\/* Open a file<br>&nbsp;* <br>&nbsp;* Print the directory listing<br>&nbsp;* Request filename up to 20 chars<br>&nbsp;* Open file and display contents<br>&nbsp;*\/<br>void openFile(){<br><br>&nbsp; printDir(); \/\/ Function to print the directory listing<br><br>&nbsp; Serial.println(&#8220;Enter a filename to OPEN&#8221;); \/\/ Request file name from user<br>&nbsp; Serial.println();<br>&nbsp; while(!Serial.available()){} \/\/ Wait for user<br><br>&nbsp; char filename[20] = {}; \/\/ buffer to store the file name<br>&nbsp; Serial.readBytesUntil(&#8216; &#8216;, filename, 20);<br>&nbsp; while(Serial.available()){Serial.read();}<br><br>&nbsp; Serial.println(filename);<br><br>&nbsp; SerialFlashFile file;<br>&nbsp; file = SerialFlash.open(filename); \/\/ open the file<br>&nbsp; if (file) {<br>&nbsp;&nbsp;&nbsp; Serial.print(&#8220;File Name: &#8220;);<br>&nbsp;&nbsp;&nbsp; Serial.println(filename);<br>&nbsp;&nbsp;&nbsp; Serial.println();<br>&nbsp;&nbsp;&nbsp; Serial.print(&#8220;File Size: &#8220;);<br>&nbsp;&nbsp;&nbsp; Serial.print(file.size());<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8221; bytes&#8221;);<br>&nbsp;&nbsp;&nbsp; Serial.println();<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8220;File Contents:&#8221;);<br>&nbsp;&nbsp;&nbsp; char buffer[256] = {}; \/\/ create a buffer for the file contents<br>&nbsp;&nbsp;&nbsp; file.read(buffer, 256); \/\/ read file to buffer<br>&nbsp;&nbsp;&nbsp; Serial.print(buffer);<br>&nbsp; }else{<br>&nbsp;&nbsp;&nbsp; Serial.println(&#8220;File not found!&#8221;);<br>&nbsp; }<br><br>&nbsp; return;<br>&nbsp; <br>}<br><br>\/* Delete a file<br>&nbsp;* <br>&nbsp;* Print the directory listing<br>&nbsp;* Request filename up to 20 chars<br>&nbsp;* Delete File<br>&nbsp;*\/<br>void deleteFile(){<br><br>&nbsp; printDir(); \/\/ Function to print the directory listing<br><br>&nbsp; Serial.println(&#8220;Enter a filename to DELETE&#8221;); \/\/ Request file name from user <br>&nbsp; while(!Serial.available()){} \/\/ Wait for user<br><br>&nbsp; char filename[20] = {}; \/\/ buffer to store file name<br>&nbsp; Serial.readBytesUntil(&#8216; &#8216;, filename, 20);<br>&nbsp; while(Serial.available()){Serial.read();}<br><br>&nbsp; SerialFlash.remove(filename); \/\/ Delete the file<br><br>&nbsp; return;<br>&nbsp; <br>}<br><br>\/* Print Directory<br>&nbsp;* <br>&nbsp;* Print a list of all files on the chip<br>&nbsp;* Stolen from SerialFlash library example &#8220;ListFiles&#8221;<br>&nbsp;*\/<br>void printDir(){<br><br>&nbsp; Serial.println(&#8220;Directory Listing&#8221;);<br>&nbsp; Serial.println(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#8220;);<br><br>&nbsp; SerialFlash.opendir();<br>&nbsp; while (1) {<br>&nbsp;&nbsp;&nbsp; char filename[64];<br>&nbsp;&nbsp;&nbsp; uint32_t filesize;<br><br>&nbsp;&nbsp;&nbsp; if (SerialFlash.readdir(filename, sizeof(filename), filesize)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(&#8221;&nbsp; &#8220;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(filename);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spaces(20 &#8211; strlen(filename));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(&#8221;&nbsp; &#8220;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(filesize);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(&#8221; bytes&#8221;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println();<br>&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; \/\/ no more files<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>}<br><br>void spaces(int num) {<br>&nbsp; for (int i=0; i &lt; num; i++) {<br>&nbsp;&nbsp;&nbsp; Serial.print(&#8221; &#8220;);<br>&nbsp; }<br>}<\/span><\/p>\n<p><span>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br><\/span><\/p>\n<p><\/p>\n<p>\u4e0d\uff0c\u5982\u679c\u8a72\u7a0b\u5f0f\u5eab\u53ea\u662f\u4f7f\u7528 Arduino IDE \u652f\u63f4\u7684\u6240\u6709\u5e73\u53f0\u7684\u901a\u7528\u529f\u80fd\u7de8\u5beb\u7684\uff0c\u90a3\u9ebc\u9019\u61c9\u8a72\u4e0d\u662f\u554f\u984c\u3002\u6211\u731c\u4f60\u6aa2\u67e5\u4e86\u986f\u800c\u6613\u898b\u7684\u4e8b\u60c5\uff1a\u6c92\u6709\u4f7f\u7528\u8207 Nano IoT 33 \u76f8\u540c\u7684\u6587\u4ef6\u540d\uff0c\u6c92\u6709\u5728\u4e4b\u524d\u7684\u5beb\u5165\u4e2d\u586b\u5145\u5b8c\u6574\u7684\u6676\u7247\uff0c\u7b49\u7b49\u3002\u5982\u679c\u4f60&#8230;&#8230;<\/p>\n<p><span>\u611f\u8b1d\u60a8\u7684\u56de\u590d\uff0c\u63a5\u7dda\u662f\uff1a<\/span><br><span>ESP32 W25Q128JV<\/span><br><span>3V3 &#8212;&#8212;&#8211;&gt; 3.3V<\/span><br><span>PIN4 &#8212;&#8212;&#8211;&gt; CS<\/span><br><span>PIN18 &#8212;&#8212;&#8211;&gt; CLK<\/span><br><span>PIN23 &#8212; &#8212;&#8212;&gt; DI<\/span><br><span>PIN19 &#8212;&#8212;&#8211;&gt; DO<\/span><br><span>3V3 &#8212;&#8212;&#8211;&gt; WP<\/span><br><span>3V3 &#8212;&#8212;&#8211;&gt; \u4fdd\u6301<\/span><br><span>\u63a5\u5730 &#8212;&#8212;&#8211; &gt; GND<\/span><br><span>\u8a72\u51fd\u5f0f\u5eab\u662f\u70ba arduino \u7de8\u5beb\u7684\uff0c\u9019\u4e0d\u6703\u9020\u6210\u554f\u984c\u55ce\uff1f<\/span><br><span>\u8b1d\u8b1d\uff01<\/span><\/p>\n<p><span>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/span><\/p>\n<p><\/p>\n<p><span>SPI \u532f\u6d41\u6392\u8a2d\u8a08\u7528\u65bc\u9023\u63a5\u8f03\u77ed\u7684 PCB\u3002\u6839\u64da\u6211\u7684\u7d93\u9a57\uff0c\u53ea\u8981\u6c92\u6709\u66f4\u5927\u7684\u96fb\u566a\u8072\u6e90\uff08pe \u99ac\u9054\uff09\u6c61\u67d3\u74b0\u5883\uff0cSPI \u983b\u7387\u9ad8\u9054 4MHz \u5de6\u53f3\u7684\u9eb5\u5305\u677f\u8a2d\u5b9a\u5c31\u53ef\u4ee5\u975e\u5e38\u53ef\u9760\u5730\u5de5\u4f5c\u3002\u60a8\u53ef\u80fd\u6703\u4ee5\u66f4\u9ad8\u7684\u983b\u7387\u53d6\u5f97\u6210\u529f\uff0c\u4f46\u9019\u53ef\u80fd\u53ea\u662f\u904b\u6c23\u3002<\/span><br><span>ESP\uff08\u901a\u5e38\uff0c\u60a8\u6c92\u6709\u544a\u8a34\u6211\u5011\u60a8\u4f7f\u7528\u7684\u7279\u5b9a\u578b\u865f\uff09\u904b\u884c\u5728 240MHz \u4e0a\u3002 SPI\u983b\u7387\u9ad8\u905450MHz\uff0c\u8d85\u904eNano ioT 33\u7684\u8655\u7406\u5668\u6642\u8108\uff0848MHz\uff09\u3002<\/span><\/p>\n<p><span>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/span><\/p>\n<p><\/p>\n<p><span>\u6211\u5efa\u8b70\u5728\u9eb5\u5305\u677f\u8a2d\u5b9a\u4e0a\u4fdd\u6301\u5728 4MHz \u6216\u4ee5\u4e0b\uff08\u5047\u8a2d\u60a8\u4f7f\u7528\u9ad8\u54c1\u8cea\u7684\u9eb5\u5305\u677f\uff09\u3002<\/span><br><span>\u5728 PCB \u4e0a\uff0c\u60a8\u53ef\u80fd\u6703\u8d70\u5f97\u66f4\u9ad8\uff0c\u5982\u679c\u60a8\u6b63\u78ba\u9032\u884c\u8d70\u7dda\u4f48\u7dda\uff0c50 MHz \u61c9\u8a72\u4e0d\u662f\u554f\u984c\u3002<\/span><\/p>\n<p><\/p>\n<p>\u591a\u8b1d\uff01\u6211\u6539\u6210 20Mhz\uff0c\u5728\u9eb5\u5305\u677f\u4e0a\u904b\u4f5c\u5f97\u5f88\u597d\u3002<\/p>\n<p><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>https:\/\/forum.arduino.cc\/t\/esp32-a&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":485,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-511","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4 - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4<\/title>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/3dok.biz\/wordpress\/?p=511\" \/>\r\n<meta property=\"og:locale\" content=\"zh_TW\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4 - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\" \/>\r\n<meta property=\"og:description\" content=\"https:\/\/forum.arduino.cc\/t\/esp32-a&#046;&#046;&#046;\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/3dok.biz\/wordpress\/?p=511\" \/>\r\n<meta property=\"og:site_name\" content=\"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\" \/>\r\n<meta property=\"article:published_time\" content=\"2024-03-30T14:53:12+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2024-04-01T05:06:22+00:00\" \/>\r\n<meta property=\"og:image\" content=\"http:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"877\" \/>\r\n\t<meta property=\"og:image:height\" content=\"411\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"Richard\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Richard\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9810\u4f30\u95b1\u8b80\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 \u5206\u9418\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511#article\",\"isPartOf\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511\"},\"author\":{\"name\":\"Richard\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/5e54f3d9faf01d51effe528b60b81ab2\"},\"headline\":\"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4\",\"datePublished\":\"2024-03-30T14:53:12+00:00\",\"dateModified\":\"2024-04-01T05:06:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511\"},\"wordCount\":967,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/#organization\"},\"image\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage\"},\"thumbnailUrl\":\"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png\",\"articleSection\":[\"Arduino\"],\"inLanguage\":\"zh-TW\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/3dok.biz\/wordpress\/?p=511#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511\",\"url\":\"https:\/\/3dok.biz\/wordpress\/?p=511\",\"name\":\"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4 - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\",\"isPartOf\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage\"},\"image\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage\"},\"thumbnailUrl\":\"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png\",\"datePublished\":\"2024-03-30T14:53:12+00:00\",\"dateModified\":\"2024-04-01T05:06:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511#breadcrumb\"},\"inLanguage\":\"zh-TW\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/3dok.biz\/wordpress\/?p=511\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-TW\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage\",\"url\":\"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png\",\"contentUrl\":\"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png\",\"width\":877,\"height\":411},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=511#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9801\",\"item\":\"https:\/\/3dok.biz\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/#website\",\"url\":\"https:\/\/3dok.biz\/wordpress\/\",\"name\":\"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\",\"description\":\"\u96fb\u8166\u79d1\u6280\u5275\u65b0 A.I. \u667a\u80fd\u79d1\u5b78 \u7269\u806f\u7db2\u901a\u8a0a\",\"publisher\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/3dok.biz\/wordpress\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-TW\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/#organization\",\"name\":\"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\",\"url\":\"https:\/\/3dok.biz\/wordpress\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-TW\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2020\/07\/python-logo-2.png\",\"contentUrl\":\"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2020\/07\/python-logo-2.png\",\"width\":290,\"height\":82,\"caption\":\"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\"},\"image\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/5e54f3d9faf01d51effe528b60b81ab2\",\"name\":\"Richard\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-TW\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8292d51406afbfc9b7d6f72c910b3babe6852736c013ade5ea75e7e8df0c55bc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8292d51406afbfc9b7d6f72c910b3babe6852736c013ade5ea75e7e8df0c55bc?s=96&d=mm&r=g\",\"caption\":\"Richard\"},\"sameAs\":[\"http:\/\/3dok.biz\/wordpress\"],\"url\":\"https:\/\/3dok.biz\/wordpress\/?author=1\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4 - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/3dok.biz\/wordpress\/?p=511","og_locale":"zh_TW","og_type":"article","og_title":"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4 - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","og_description":"https:\/\/forum.arduino.cc\/t\/esp32-a&#46;&#46;&#46;","og_url":"https:\/\/3dok.biz\/wordpress\/?p=511","og_site_name":"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","article_published_time":"2024-03-30T14:53:12+00:00","article_modified_time":"2024-04-01T05:06:22+00:00","og_image":[{"width":877,"height":411,"url":"http:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png","type":"image\/png"}],"author":"Richard","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005:":"Richard","\u9810\u4f30\u95b1\u8b80\u6642\u9593":"4 \u5206\u9418"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/3dok.biz\/wordpress\/?p=511#article","isPartOf":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=511"},"author":{"name":"Richard","@id":"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/5e54f3d9faf01d51effe528b60b81ab2"},"headline":"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4","datePublished":"2024-03-30T14:53:12+00:00","dateModified":"2024-04-01T05:06:22+00:00","mainEntityOfPage":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=511"},"wordCount":967,"commentCount":0,"publisher":{"@id":"https:\/\/3dok.biz\/wordpress\/#organization"},"image":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage"},"thumbnailUrl":"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png","articleSection":["Arduino"],"inLanguage":"zh-TW","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/3dok.biz\/wordpress\/?p=511#respond"]}]},{"@type":"WebPage","@id":"https:\/\/3dok.biz\/wordpress\/?p=511","url":"https:\/\/3dok.biz\/wordpress\/?p=511","name":"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4 - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","isPartOf":{"@id":"https:\/\/3dok.biz\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage"},"image":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage"},"thumbnailUrl":"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png","datePublished":"2024-03-30T14:53:12+00:00","dateModified":"2024-04-01T05:06:22+00:00","breadcrumb":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=511#breadcrumb"},"inLanguage":"zh-TW","potentialAction":[{"@type":"ReadAction","target":["https:\/\/3dok.biz\/wordpress\/?p=511"]}]},{"@type":"ImageObject","inLanguage":"zh-TW","@id":"https:\/\/3dok.biz\/wordpress\/?p=511#primaryimage","url":"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png","contentUrl":"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2024\/03\/Arduino-esp32-esp8266-SPI-Flash-Discrete-PDIP-pinout-w25-25.png","width":877,"height":411},{"@type":"BreadcrumbList","@id":"https:\/\/3dok.biz\/wordpress\/?p=511#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9801","item":"https:\/\/3dok.biz\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Esp32 \u8207 Winbond W25Q128JV \u4e32\u5217\u5feb\u9583\u8a18\u61b6\u9ad4"}]},{"@type":"WebSite","@id":"https:\/\/3dok.biz\/wordpress\/#website","url":"https:\/\/3dok.biz\/wordpress\/","name":"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","description":"\u96fb\u8166\u79d1\u6280\u5275\u65b0 A.I. \u667a\u80fd\u79d1\u5b78 \u7269\u806f\u7db2\u901a\u8a0a","publisher":{"@id":"https:\/\/3dok.biz\/wordpress\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/3dok.biz\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-TW"},{"@type":"Organization","@id":"https:\/\/3dok.biz\/wordpress\/#organization","name":"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","url":"https:\/\/3dok.biz\/wordpress\/","logo":{"@type":"ImageObject","inLanguage":"zh-TW","@id":"https:\/\/3dok.biz\/wordpress\/#\/schema\/logo\/image\/","url":"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2020\/07\/python-logo-2.png","contentUrl":"https:\/\/3dok.biz\/wordpress\/wp-content\/uploads\/2020\/07\/python-logo-2.png","width":290,"height":82,"caption":"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4"},"image":{"@id":"https:\/\/3dok.biz\/wordpress\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/5e54f3d9faf01d51effe528b60b81ab2","name":"Richard","image":{"@type":"ImageObject","inLanguage":"zh-TW","@id":"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8292d51406afbfc9b7d6f72c910b3babe6852736c013ade5ea75e7e8df0c55bc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8292d51406afbfc9b7d6f72c910b3babe6852736c013ade5ea75e7e8df0c55bc?s=96&d=mm&r=g","caption":"Richard"},"sameAs":["http:\/\/3dok.biz\/wordpress"],"url":"https:\/\/3dok.biz\/wordpress\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=511"}],"version-history":[{"count":13,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/511\/revisions"}],"predecessor-version":[{"id":524,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/511\/revisions\/524"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/485"}],"wp:attachment":[{"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}