﻿{"id":500,"date":"2024-03-30T22:11:04","date_gmt":"2024-03-30T14:11:04","guid":{"rendered":"https:\/\/3dok.biz\/wordpress\/?p=500"},"modified":"2024-04-01T13:05:31","modified_gmt":"2024-04-01T05:05:31","slug":"arduino-esp32-and-winbond-w25q128jv-serial-flash-memory","status":"publish","type":"post","link":"https:\/\/3dok.biz\/wordpress\/?p=500","title":{"rendered":"Arduino: Esp32 and Winbond W25Q128JV serial flash memory"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"500\" class=\"elementor elementor-500\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a51e23f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a51e23f\" 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-20a9488\" data-id=\"20a9488\" 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-1c30d76 elementor-widget elementor-widget-text-editor\" data-id=\"1c30d76\" 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>With an example code(added at the end of message), It works fine with Arduino Nano IoT 33, but with esp32 I can&#8217;t see the files or write anything to the chip.<br \/>It seems to fail on SerialFlash.create() function when returning maxfiles able to write as 0.<br \/>Any idea?<br \/>Thanks<br \/>This is the example code:<\/p><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p><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><div><pre><code data-highlighted=\"yes\">#include &lt;SerialFlash.h&gt;\n#include &lt;SPI.h&gt;\n\nconst int FlashChipSelect = 4; \n\nvoid setup(){\n\n  Serial.begin(115200);\n  delay(3000);\n  Serial.println(\"SPI Flash\");\n  \n  if (!SerialFlash.begin(FlashChipSelect)) {\n    Serial.println(\"Unable to access SPI Flash chip\");\n    while(1){}\n  }\n  \n}\n\nvoid loop(){\n\n  \/\/ MAIN MENU\n  Serial.println(\"\");\n  Serial.println(\"\");\n  Serial.println(\"SerialFlash Read and Write\");\n  Serial.println(\"(switch your terminal to no line endings)\");\n  Serial.println(\"--------------------------\");\n  Serial.println(\"1) Create a new file\");\n  Serial.println(\"2) Open a file\");\n  Serial.println(\"3) Delete a file\");\n  Serial.println(\"--------------------------\");\n  Serial.println(\"Select a number\");\n  while(!Serial.available()){}\n  char choice = Serial.read();\n  while(Serial.available()){Serial.read();}\n\n  switch(choice){\n\n    case '1':\n      newFile();\n      break;\n\n    case '2':\n      openFile();\n      break;\n\n    case '3':\n      deleteFile();\n      break;\n\n    default:\n      Serial.println(\"Invalid Selection\");\n    \n  }\n  \n}\n\n\/* Create a new file\n * \n * Request filename up to 20 chars\n * Request a size up to 256 bytes\n * Request some contents\n * Create a file\n *\/\nvoid newFile(){\n\n  Serial.println(\"Enter a filename\"); \/\/ Request filename from user\n  while(!Serial.available()){} \/\/ Wait for user\n\n  char filename[20] = {}; \/\/ buffer to store user filename\n  Serial.readBytesUntil(' ', filename, 20);\n  while(Serial.available()){Serial.read();}\n\n  Serial.println(\"Enter a filesize in bytes\"); \/\/ Request file size from user\n  while(!Serial.available()){} \/\/ Wait for user\n\n  char sizeArray[3] = {}; \/\/ buffer to store requested file size\n  Serial.readBytesUntil(' ', sizeArray, 3);\n  while(Serial.available()){Serial.read();}\n  int filesize = atoi(sizeArray); \/\/ Convert char array to int (i.e. \"40\" to 40) \n\n  if(SerialFlash.create(filename, filesize)){ \/\/ Returns false if file already exists\n\n    SerialFlashFile file; \/\/ Open the file we just created for writing\n    file = SerialFlash.open(filename);\n    Serial.println(\"Write some file contents:\"); \/\/ Request file contents from user\n    while(!Serial.available()){} \/\/ Wait for user\n\n    char contents[256] = {}; \/\/ buffer to store file contents\n    Serial.readBytesUntil(255, contents, 256);\n    while(Serial.available()){Serial.read();} \/\/ Empty read buffer\n    file.write(contents, filesize); \/\/ Write the contents buffer\n    Serial.println(\"\");\n    Serial.print(\"New file \");\n    Serial.print(filename);\n    Serial.print(\" created with size \");\n    Serial.print(filesize);\n    Serial.println(\" bytes!\");\n  }else{\n    Serial.println(\"\");\n    Serial.println(\"There was an error creating this file (does it already exist?)\");\n  }\n\n  return;\n  \n}\n\n\/* Open a file\n * \n * Print the directory listing\n * Request filename up to 20 chars\n * Open file and display contents\n *\/\nvoid openFile(){\n\n  printDir(); \/\/ Function to print the directory listing\n\n  Serial.println(\"Enter a filename to OPEN\"); \/\/ Request file name from user\n  Serial.println();\n  while(!Serial.available()){} \/\/ Wait for user\n\n  char filename[20] = {}; \/\/ buffer to store the file name\n  Serial.readBytesUntil(' ', filename, 20);\n  while(Serial.available()){Serial.read();}\n\n  Serial.println(filename);\n\n  SerialFlashFile file;\n  file = SerialFlash.open(filename); \/\/ open the file\n  if (file) {\n    Serial.print(\"File Name: \");\n    Serial.println(filename);\n    Serial.println();\n    Serial.print(\"File Size: \");\n    Serial.print(file.size());\n    Serial.println(\" bytes\");\n    Serial.println();\n    Serial.println(\"File Contents:\");\n    char buffer[256] = {}; \/\/ create a buffer for the file contents\n    file.read(buffer, 256); \/\/ read file to buffer\n    Serial.print(buffer);\n  }else{\n    Serial.println(\"File not found!\");\n  }\n\n  return;\n  \n}\n\n\/* Delete a file\n * \n * Print the directory listing\n * Request filename up to 20 chars\n * Delete File\n *\/\nvoid deleteFile(){\n\n  printDir(); \/\/ Function to print the directory listing\n\n  Serial.println(\"Enter a filename to DELETE\"); \/\/ Request file name from user \n  while(!Serial.available()){} \/\/ Wait for user\n\n  char filename[20] = {}; \/\/ buffer to store file name\n  Serial.readBytesUntil(' ', filename, 20);\n  while(Serial.available()){Serial.read();}\n\n  SerialFlash.remove(filename); \/\/ Delete the file\n\n  return;\n  \n}\n\n\/* Print Directory\n * \n * Print a list of all files on the chip\n * Stolen from SerialFlash library example \"ListFiles\"\n *\/\nvoid printDir(){\n\n  Serial.println(\"Directory Listing\");\n  Serial.println(\"-----------------\");\n\n  SerialFlash.opendir();\n  while (1) {\n    char filename[64];\n    uint32_t filesize;\n\n    if (SerialFlash.readdir(filename, sizeof(filename), filesize)) {\n      Serial.print(\"  \");\n      Serial.print(filename);\n      spaces(20 - strlen(filename));\n      Serial.print(\"  \");\n      Serial.print(filesize);\n      Serial.print(\" bytes\");\n      Serial.println();\n    } else {\n      break; \/\/ no more files\n    }\n  }\n}\n\nvoid spaces(int num) {\n  for (int i=0; i &lt; num; i++) {\n    Serial.print(\" \");\n  }\n}\n<\/code><\/pre><\/div><div>\u00a0<\/div><div><aside data-post=\"4\" data-topic=\"861315\"><div data-has-quote-controls=\"true\">\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;<\/div><\/aside><\/div>\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>With an example code(added at the &#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-500","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>Arduino: Esp32 and Winbond W25Q128JV serial flash memory - 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=500\" \/>\r\n<meta property=\"og:locale\" content=\"zh_TW\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Arduino: Esp32 and Winbond W25Q128JV serial flash memory - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\" \/>\r\n<meta property=\"og:description\" content=\"With an example code(added at the &#046;&#046;&#046;\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/3dok.biz\/wordpress\/?p=500\" \/>\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:11:04+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2024-04-01T05:05:31+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=\"1 \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=500#article\",\"isPartOf\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500\"},\"author\":{\"name\":\"Richard\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/5e54f3d9faf01d51effe528b60b81ab2\"},\"headline\":\"Arduino: Esp32 and Winbond W25Q128JV serial flash memory\",\"datePublished\":\"2024-03-30T14:11:04+00:00\",\"dateModified\":\"2024-04-01T05:05:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500\"},\"wordCount\":77,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/#organization\"},\"image\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500#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=500#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500\",\"url\":\"https:\/\/3dok.biz\/wordpress\/?p=500\",\"name\":\"Arduino: Esp32 and Winbond W25Q128JV serial flash memory - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4\",\"isPartOf\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500#primaryimage\"},\"image\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500#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:11:04+00:00\",\"dateModified\":\"2024-04-01T05:05:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500#breadcrumb\"},\"inLanguage\":\"zh-TW\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/3dok.biz\/wordpress\/?p=500\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-TW\",\"@id\":\"https:\/\/3dok.biz\/wordpress\/?p=500#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=500#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9801\",\"item\":\"https:\/\/3dok.biz\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Arduino: Esp32 and Winbond W25Q128JV serial flash memory\"}]},{\"@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":"Arduino: Esp32 and Winbond W25Q128JV serial flash memory - 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=500","og_locale":"zh_TW","og_type":"article","og_title":"Arduino: Esp32 and Winbond W25Q128JV serial flash memory - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","og_description":"With an example code(added at the &#46;&#46;&#46;","og_url":"https:\/\/3dok.biz\/wordpress\/?p=500","og_site_name":"Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","article_published_time":"2024-03-30T14:11:04+00:00","article_modified_time":"2024-04-01T05:05:31+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":"1 \u5206\u9418"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/3dok.biz\/wordpress\/?p=500#article","isPartOf":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=500"},"author":{"name":"Richard","@id":"https:\/\/3dok.biz\/wordpress\/#\/schema\/person\/5e54f3d9faf01d51effe528b60b81ab2"},"headline":"Arduino: Esp32 and Winbond W25Q128JV serial flash memory","datePublished":"2024-03-30T14:11:04+00:00","dateModified":"2024-04-01T05:05:31+00:00","mainEntityOfPage":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=500"},"wordCount":77,"commentCount":0,"publisher":{"@id":"https:\/\/3dok.biz\/wordpress\/#organization"},"image":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=500#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=500#respond"]}]},{"@type":"WebPage","@id":"https:\/\/3dok.biz\/wordpress\/?p=500","url":"https:\/\/3dok.biz\/wordpress\/?p=500","name":"Arduino: Esp32 and Winbond W25Q128JV serial flash memory - Richard Studio \u7406\u67e5\u5de5\u4f5c\u5ba4","isPartOf":{"@id":"https:\/\/3dok.biz\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=500#primaryimage"},"image":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=500#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:11:04+00:00","dateModified":"2024-04-01T05:05:31+00:00","breadcrumb":{"@id":"https:\/\/3dok.biz\/wordpress\/?p=500#breadcrumb"},"inLanguage":"zh-TW","potentialAction":[{"@type":"ReadAction","target":["https:\/\/3dok.biz\/wordpress\/?p=500"]}]},{"@type":"ImageObject","inLanguage":"zh-TW","@id":"https:\/\/3dok.biz\/wordpress\/?p=500#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=500#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9801","item":"https:\/\/3dok.biz\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Arduino: Esp32 and Winbond W25Q128JV serial flash memory"}]},{"@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\/500","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=500"}],"version-history":[{"count":7,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/500\/revisions"}],"predecessor-version":[{"id":507,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/500\/revisions\/507"}],"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=500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/3dok.biz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}