{"id":865,"date":"2025-06-25T14:32:18","date_gmt":"2025-06-25T06:32:18","guid":{"rendered":"https:\/\/aimc.skyate.com\/?p=865"},"modified":"2025-06-25T14:32:58","modified_gmt":"2025-06-25T06:32:58","slug":"%e3%80%90aimc%e6%95%99%e7%a8%8b%e3%80%91%e3%80%90%e7%94%b5%e5%ad%90%e8%ae%be%e8%ae%a1%e5%b7%a5%e5%9d%8a%e3%80%91part4-spiffs%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f","status":"publish","type":"post","link":"https:\/\/aimc.skyate.com\/index.php\/2025\/06\/25\/%e3%80%90aimc%e6%95%99%e7%a8%8b%e3%80%91%e3%80%90%e7%94%b5%e5%ad%90%e8%ae%be%e8%ae%a1%e5%b7%a5%e5%9d%8a%e3%80%91part4-spiffs%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f\/","title":{"rendered":"\u3010AIMC\u6559\u7a0b\u3011\u3010\u7535\u5b50\u8bbe\u8ba1\u5de5\u574a\u3011Part4 SPIFFS\u6587\u4ef6\u7cfb\u7edf"},"content":{"rendered":"\n<p>\u2460 \u6587\u4ef6\u7cfb\u7edf\u4e0eSPIFFS<\/p>\n\n\n\n<p>\u2461 Json\u4e0eArduinoJSON<\/p>\n\n\n\n<p>\u2462 \u7cfb\u7edf\u53c2\u6570\u6301\u4e45\u5316\u7cfb\u7edf\u5f00\u53d1<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1 \u6587\u4ef6\u7cfb\u7edf<\/h2>\n\n\n\n<p>\u4ece\u7cfb\u7edf\u89d2\u5ea6\u6765\u770b\uff0c\u6587\u4ef6\u7cfb\u7edf\u662f\u5bf9\u6587\u4ef6\u5b58\u50a8\u5668\u7a7a\u95f4\u8fdb\u884c\u7ec4\u7ec7\u3001\u5206\u914d\u3001\u8d1f\u8d23\u6587\u4ef6\u5b58\u50a8\u5e76\u5bf9\u5b58\u5165\u7684\u6587\u4ef6\u8fdb\u884c\u4fdd\u62a4\u548c\u68c0\u7d22\u7684\u4e00\u4e2a\u7cfb\u7edf\u3002<\/p>\n\n\n\n<p>\u5b83\u7684\u76ee\u7684\u662f\u4f7f\u7528\u6237\u548c\u5e94\u7528\u7a0b\u5e8f\u80fd\u591f\u65b9\u4fbf\u5730\u7ba1\u7406\u5b58\u50a8\u5668\u4e0a\u7684\u6587\u4ef6\u548c\u76ee\u5f55\uff0c\u6bd4\u5982\u5e38\u89c1\u7684\u5bf9\u6587\u4ef6\u7684\u589e\u3001\u5220\u3001\u6539\u3001\u67e5\u3002<\/p>\n\n\n\n<p>\u6bcf\u5f53\u6211\u4eec\u64cd\u4f5c\u4e00\u4e2a\u6587\u4ef6\u7684\u65f6\u5019\uff0c\u5b9e\u9645\u90fd\u4f1a\u6d89\u53ca\u5230\u5b58\u50a8\u5668\u3001\u7ba1\u7406\u7cfb\u7edf\u3001\u88ab\u7ba1\u7406\u6587\u4ef6\uff0c\u8fd8\u6709\u5c31\u662f\u5b9e\u65bd\u6587\u4ef6\u7ba1\u7406\u6240\u9700\u7684\u6570\u636e\u7ed3\u6784\u3002<\/p>\n\n\n\n<p>\u5b58\u50a8\u5668\uff0c\u6211\u4eec\u4e5f\u53eb<strong>\u5b58\u50a8\u4ecb\u8d28<\/strong>\uff0c\u4e5f\u5c31\u662f\u7535\u5b50\u8bbe\u5907\u7528\u6765\u5b58\u50a8\u6570\u636e\u4fe1\u606f\u7684\u5668\u4ef6\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1.1 \u5b58\u50a8\u4ecb\u8d28\u4ecb\u7ecd<\/strong><\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"569\" height=\"423\" src=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-48.png\" alt=\"\" class=\"wp-image-866\" srcset=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-48.png 569w, https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-48-300x223.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/figure>\n<\/div>\n\n\n<p>\u5b58\u50a8\u4ecb\u8d28\uff0c\u4e5f\u5c31\u662f\u7528\u6765\u5b58\u50a8\u4fe1\u606f\u7684\u4ecb\u8d28\uff0c\u4ece\u8fdc\u53e4\u7684\u77f3\u58c1\u523b\u753b\uff0c\u5230\u53e4\u4ee3\u7684\u7b14\u58a8\u7eb8\u781a\u8bb0\u5f55\uff0c\u518d\u5230\u7535\u6c14\u65f6\u4ee3\u7684\u78c1\u5b58\u50a8\u3001\u5149\u5b58\u50a8\u3001\u534a\u5bfc\u4f53\u82af\u7247\u5b58\u50a8\u3002<\/p>\n\n\n\n<p>\u5149\u76d8\u5b58\u50a8\u5df2\u8fd1\u9010\u6e10\u5730\u9000\u51fa\u5927\u4f17\u7684\u89c6\u91ce\uff0c\u6211\u4eec\u8fd9\u91cc\u4e3b\u8981\u4ecb\u7ecd\u78c1\u5b58\u50a8\u548c\u534a\u5bfc\u4f53\u5b58\u50a8\u3002\u78c1\u5b58\u50a8\u7684\u4ee3\u8868\u5c31\u662f\u673a\u68b0\u786c\u76d8\uff0c\u534a\u5bfc\u4f53\u5b58\u50a8\u5df2\u8fd1\u88ab\u975e\u5e38\u5e7f\u6cdb\u5730\u5e94\u7528\u4e86\uff0c\u6bd4\u5982\u6211\u4eec\u5e38\u7528\u7684U\u76d8\u3001SD\u5361\u3001TF\u5361\u3001\u56fa\u6001\u786c\u76d8\u7b49\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u673a\u68b0\u786c\u76d8\u56e0\u4e3a\u5b83\u5bb9\u91cf\u5927\u3001\u4ef7\u683c\u4f4e\uff0c\u5728\u4e2a\u4eba\u7535\u8111\u4e2d\u5e7f\u6cdb\u4f7f\u7528\uff0c<\/li>\n\n\n\n<li>\u56fa\u6001\u5b58\u50a8\u901f\u5ea6\u5feb\uff0c\u529f\u8017\u4f4e\uff0c\u65e0\u566a\u97f3\uff0c\u540c\u7b49\u5bb9\u91cf\u7684\u4ef7\u683c\u4e5f\u6bd4\u8f83\u7684\u5e73\u6c11\uff0c\u5728\u5404\u79cd\u4fbf\u643a\u5f0f\u5b58\u50a8\u8bbe\u5907\u4e2d\u5e7f\u6cdb\u4f7f\u7528\u3002<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"575\" height=\"526\" src=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-49.png\" alt=\"\" class=\"wp-image-867\" srcset=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-49.png 575w, https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-49-300x274.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/figure>\n<\/div>\n\n\n<p>\u56fa\u6001\u5b58\u50a8\uff0c\u4e5f\u5c31\u662f\u4e0d\u4f9d\u8d56\u673a\u68b0\u4f20\u52a8\uff0c\u76f4\u63a5\u4f7f\u7528\u534a\u5bfc\u4f53\u82af\u7247\u4e3a\u4ecb\u8d28\u7684\u4e00\u79cd\u5b58\u50a8\u3002\u5927\u7684\u5206\u7c7b\u53ef\u4ee5\u5206\u4e3a\u4e24\u79cd: RAM\u548cROM\u3002<\/p>\n\n\n\n<p>Flash\u5176\u5b9e\u4e5f\u7b97\u662fROM\u7684\u4e00\u79cd\u53d8\u79cd\uff0c\u73b0\u5728\u5e7f\u6cdb\u4f7f\u7528\u7684 ROM \u5927\u90e8\u5206\u90fd\u662f\u57fa\u4e8eFlash\u8bbe\u8ba1\u7684\u3002\u5927\u90e8\u5206\u56fa\u6001\u786c\u76d8\u7684\u5b58\u50a8\u4ecb\u8d28\u4e5f\u662fFlash\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"570\" height=\"380\" src=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-50.png\" alt=\"\" class=\"wp-image-868\" srcset=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-50.png 570w, https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-50-300x200.png 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/figure>\n<\/div>\n\n\n<p><strong>(1)<\/strong><strong>RAM<\/strong><strong>\u4e0e<\/strong><strong>ROM<\/strong><\/p>\n\n\n\n<p><strong>RAM<\/strong><strong>(<\/strong><strong>\u968f\u673a\u8bbf\u95ee<\/strong><strong>\u5b58\u50a8\u5668)<\/strong>:<\/p>\n\n\n\n<p>\u662f\u4e00\u79cd\u4e34\u65f6\u5b58\u50a8\u5668\uff0c\u7528\u4e8e\u4fdd\u5b58\u6b63\u5728\u8fd0\u884c\u65f6\u6240\u9700\u7684\u6570\u636e\u548c\u7a0b\u5e8f\uff0c\u53ef\u8bfb\u53ef\u5199\uff0c\u5141\u8bb8\u5728\u9700\u8981\u65f6\u5feb\u901f\u8bfb\u53d6\u6216\u5199\u5165\u6570\u636e\uff0c\u4f46\u5b83\u4e5f\u662f\u6613\u5931\u6027\u5b58\u50a8\u5668\uff0c\u8bbe\u5907\u65ad\u7535\u65f6\u91cc\u9762\u7684\u6570\u636e\u4f1a\u4e22\u5931\u3002<\/p>\n\n\n\n<p><strong>ROM<\/strong><strong>(<\/strong><strong>\u53ea\u8bfb\u5b58\u50a8\u5668<\/strong><strong>)<\/strong> :<\/p>\n\n\n\n<p>\u7528\u4e8e\u5b58\u50a8\u56fa\u5b9a\u7684\u3001\u4e0d\u7ecf\u5e38\u53d8\u5316\u7684\u6570\u636e\u548c\u7a0b\u5e8f\uff0c\u5b83\u662f\u53ea\u8bfb\u7684\uff0c\u901a\u5e38\u5728\u5236\u9020\u65f6\u88ab\u5199\u5165\uff0c\u5e76\u4e14\u5176\u5185\u5bb9\u5728\u6b63\u5e38\u64cd\u4f5c\u671f\u95f4\u4e0d\u53ef\u66f4\u6539\u3002\u4f46\u5b83\u5b58\u5728\u4e00\u4e9b\u53d8\u79cd\uff0c\u5982\u53ef\u64e6\u5199\u53ef\u7f16\u7a0b\u53ea\u8bfb\u5b58\u50a8\u5668(EPROM)\u548c\u95ea\u5b58(Flash)\uff0c\u5b83\u4eec\u5141\u8bb8\u6709\u9650\u6b21\u7684\u53ef\u7f16\u7a0b\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p><strong>Flash\u5b58\u50a8\u5668<\/strong> \uff1a<\/p>\n\n\n\n<p>\u5b83\u662f\u4e00\u79cd\u975e\u6613\u5931\u6027\u5b58\u50a8\u6280\u672f\uff0c\u5e7f\u6cdb\u7528\u4e8e\u5404\u79cd\u7535\u5b50\u8bbe\u5907\u3001USB\u3001\u56fa\u6001\u786c\u76d8\u7b49\u4ea7\u54c1\u3002\u5b83\u5206\u4e3aNOR Flash \u548cNAND Flash \u4e24\u79cd<\/p>\n\n\n\n<p><strong>(2) <\/strong><strong>NOR Flash<\/strong><\/p>\n\n\n\n<p>\u5b83\u91c7\u7528 NOR(\u4e0d\u6216\u975e)\u95e8\u7ed3\u6784\uff0c\u4e0eNAND Flash\u76f8\u6bd4\uff0cNOR Flash\u5177\u6709\u4e00\u4e9b\u7279\u5b9a\u7684\u7279\u6027\u548c\u4f18\u52bf\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8bfb\u53d6\u901f\u5ea6\u5feb<\/li>\n\n\n\n<li>\u968f\u673a\u8bbf\u95ee\u80fd\u529b<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u4ee3\u7801\u5b58\u50a8<\/li>\n\n\n\n<li>\u5199\u5165\u64e6\u9664\u901f\u5ea6\u8f83\u6162<\/li>\n\n\n\n<li>\u4f4e\u529f\u8017<\/li>\n<\/ul>\n\n\n\n<p><strong>(3) <\/strong><strong>NAND Flash<\/strong><\/p>\n\n\n\n<p>NAND Flash\u91c7\u7528NAND\u95e8\u7ed3\u6784\uff0c\u4e0eNOR Flash\u76f8\u6bd4\uff0c\u5b83\u5177\u6709\u4e00\u4e9b\u72ec\u7279\u7684\u7279\u70b9\u548c\u4f18\u52bf\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ad8\u5bc6\u5ea6\u5b58\u50a8<\/li>\n\n\n\n<li>\u76f8\u5bf9\u4f4e\u6210\u672c<\/li>\n\n\n\n<li>\u64e6\u5199\u719f\u8bfb\u5feb<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u5927\u5bb9\u91cf\u6570\u636e\u5b58\u50a8<\/li>\n\n\n\n<li>\u987a\u5e8f\u8bbf\u95ee<\/li>\n<\/ul>\n\n\n\n<p><strong>(4)\u57fa\u4e8eFlash\u7684\u5e94\u7528<\/strong><\/p>\n\n\n\n<p>\u5728\u5d4c\u5165\u5f0f\u8bbe\u5907\uff0c\u4e00\u822c\u662f\u76f4\u63a5\u4f7f\u7528Flash\u5b58\u50a8\u5668\u6765\u5b58\u50a8\u7a0b\u5e8f\u548c\u4ee3\u7801\uff0c\u6309\u603b\u7ebf\u7c7b\u578b\uff0c\u53ef\u4ee5\u5206\u4e3a\u4e32\u884c\u548c\u5e76\u884c\u603b\u7ebf\u63a5\u53e3\uff0c\u5728\u5d4c\u5165\u5f0f\u8bbe\u5907\u4e2d\u4f7f\u7528\u7684\u6bd4\u8f83\u591a\u7684\u662fSPI\u4e32\u884c\u603b\u7ebf\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u6587\u4ef6\u7cfb\u7edf<\/h3>\n\n\n\n<p>\u6587\u4ef6\u662f\u64cd\u4f5c\u7cfb\u7edf\u7ba1\u7406\u7528\u6237\u6570\u636e\u7684\u57fa\u672c\u5355\u4f4d\uff0c\u662f\u5b58\u50a8\u5728\u5916\u90e8\u5b58\u50a8\u8bbe\u5907\u4e0a\u7684\u4e00\u7ec4\u76f8\u5173\u4fe1\u606f\u7684\u96c6\u5408\u3002\u6587\u4ef6\u7684\u6838\u5fc3\u7279\u6027\u5305\u62ec\uff1a<\/p>\n\n\n\n<p>\u903b\u8f91\u6027\u548c\u62bd\u8c61\u6027\uff1a\u6587\u4ef6\u4e3a\u7528\u6237\u63d0\u4f9b\u4e86\u4e00\u79cd\u903b\u8f91\u89c6\u56fe\uff0c\u4e0e\u5e95\u5c42\u7269\u7406\u5b58\u50a8\u7ec6\u8282\u65e0\u5173\u3002\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u6587\u4ef6\u540d\u548c\u8def\u5f84\u8f7b\u677e\u8bbf\u95ee\u6570\u636e\uff0c\u800c\u65e0\u9700\u5173\u5fc3\u6570\u636e\u5728\u78c1\u76d8\u4e2d\u7684\u5b58\u50a8\u65b9\u5f0f\u3002<\/p>\n\n\n\n<p>\u591a\u6837\u6027\uff1a\u6587\u4ef6\u53ef\u4ee5\u5305\u542b\u5404\u79cd\u7c7b\u578b\u7684\u6570\u636e\uff0c\u5305\u62ec\u6587\u672c\u3001\u56fe\u50cf\u3001\u97f3\u9891\u548c\u4e8c\u8fdb\u5236\u6570\u636e\u7b49\u3002<\/p>\n\n\n\n<p>\u6301\u4e45\u6027\uff1a\u6587\u4ef6\u5728\u8bbe\u5907\u65ad\u7535\u6216\u7cfb\u7edf\u91cd\u542f\u540e\u4ecd\u7136\u5b58\u5728\uff0c\u786e\u4fdd\u6570\u636e\u7684\u957f\u671f\u4fdd\u5b58\u3002<\/p>\n\n\n\n<p>\u6587\u4ef6\u5c5e\u6027\uff1a<\/p>\n\n\n\n<p>\u6bcf\u4e2a\u6587\u4ef6\u5177\u6709\u4e00\u7ec4\u5c5e\u6027\uff0c\u7528\u4e8e\u63cf\u8ff0\u6587\u4ef6\u7684\u72b6\u6001\u548c\u8bbf\u95ee\u6743\u9650\uff0c\u5305\u62ec\u6587\u4ef6\u540d\u3001\u7c7b\u578b\u3001\u5927\u5c0f\u3001\u521b\u5efa\u65f6\u95f4\u3001\u6700\u540e\u4fee\u6539\u65f6\u95f4\u3001\u6743\u9650\u548c\u6240\u6709\u8005\u7b49\u3002<\/p>\n\n\n\n<p>\u6587\u4ef6\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<p>\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u4e00\u7cfb\u5217\u6587\u4ef6\u64cd\u4f5c\uff0c\u5305\u62ec\u521b\u5efa\u3001\u5220\u9664\u3001\u8bfb\u3001\u5199\u3001\u91cd\u547d\u540d\u3001\u590d\u5236\u548c\u79fb\u52a8\u6587\u4ef6\u3002\u8fd9\u4e9b\u64cd\u4f5c\u7531\u7cfb\u7edf\u8c03\u7528\u5b9e\u73b0\uff0c\u5982open()\u3001read()\u548cwrite()\u7b49\u3002<\/p>\n\n\n\n<p>\u6587\u4ef6\u662f\u73b0\u4ee3\u8ba1\u7b97\u673a\u7cfb\u7edf\u7684\u91cd\u8981\u7ec4\u6210\u90e8\u5206\uff0c\u4e3a\u6570\u636e\u5b58\u50a8\u548c\u7ba1\u7406\u63d0\u4f9b\u4e86\u57fa\u672c\u6846\u67b6\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 SPIFFS<\/h3>\n\n\n\n<p>\u5728ESP32S3\u5f00\u53d1\u4e2d\uff0c\u652f\u6301\u591a\u79cd\u5b58\u50a8\u4ecb\u8d28\uff0c\u5305\u62ecTF\u5361\u3001FLASH\u3002\u5176\u4e2d\u7531\u4e8eESP32S3\u4e00\u822c\u4f1a\u5177\u6709\u8f83\u5927\u7684SPI flash\u7528\u4e8e\u5b58\u50a8\u4ee3\u7801\u3002\u4f46\u4e8b\u5b9e\u4e0a\u6211\u4eec\u5f88\u5c11\u5c06\u5168\u90e8\u7a7a\u95f4\u7528\u4e8e\u5b58\u50a8\u4ee3\u7801\u3002\u5bf9\u4e8e\u7247\u5916\u7684Flash \u5b83\u662f\u53ef\u8bfb\u53ef\u5199\u7684\uff0c\u7531\u4e8e\u5b83\u7684\u5bb9\u91cf\u9ad8\u8fbe16MB\uff0c\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u5728\u5176\u4e2d\u5b58\u50a8\u5927\u91cf\u7684\u914d\u7f6e\u6587\u4ef6\u3001\u56fe\u50cf\u3001\u97f3\u9891\u6587\u4ef6\uff0c\u751a\u81f3\u662f\u4e00\u4e9b\u5c0f\u578b\u7684\u89c6\u9891\u6587\u4ef6\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u5f88\u591a\u6709\u8da3\u7684\u9879\u76ee\u548c\u5e94\u7528.<\/p>\n\n\n\n<p>SPIFFS \u662f\u4e00\u4e2a\u7528\u4e8e SPI NOR Flash \u8bbe\u5907\u7684\u5d4c\u5165\u5f0f\u6587\u4ef6\u7cfb\u7edf\uff0c\u652f\u6301\u78e8\u635f\u5747\u8861\uff08\u5d4c\u5165\u5f0f\u8bbe\u5907\u4f7f\u7528\u7684\u5927\u591a\u6570\u5b58\u50a8\u82af\u7247\u90fd\u652f\u6301\u6bcf\u4e2a\u6247\u533a\u6709\u9650\u7684\u64e6\u9664\u96c6\uff0c\u5982\u679c\u6ca1\u6709\u5747\u8861\uff0c\u5219\u5d4c\u5165\u5f0f\u8bbe\u5907\u7684\u5bff\u547d\u53ef\u80fd\u4f1a\u53d7\u5230\u5f71\u54cd\uff09\u3001\u6587\u4ef6\u7cfb\u7edf\u4e00\u81f4\u6027\u68c0\u67e5\u7b49\u529f\u80fd\u3002\u8be5\u6587\u4ef6\u7cfb\u7edf\u53ea\u9700\u8981\u5c11\u91cf\u7684RAM\u5c31\u53ef\u4ee5\u8fd0\u884c\u3002<\/p>\n\n\n\n<p>SPIFFS \u662f\u4e00\u4e2a\u7528\u4e8e SPI NOR flash \u8bbe\u5907\u7684\u5d4c\u5165\u5f0f\u6587\u4ef6\u7cfb\u7edf\u3002 \u76ee\u524d\uff0cSPIFFS \u5c1a\u4e0d\u652f\u6301\u76ee\u5f55\uff0c\u4f46\u53ef\u4ee5\u751f\u6210\u6241\u5e73\u7ed3\u6784\u3002\u5982\u679c SPIFFS \u6302\u8f7d\u5728 \/spiffs \u4e0b\uff0c\u5728 \/spiffs\/tmp\/myfile.txt \u8def\u5f84\u4e0b\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5219\u4f1a\u5728 SPIFFS \u4e2d\u751f\u6210\u4e00\u4e2a\u540d\u4e3a \/tmp\/myfile.txt \u7684\u6587\u4ef6\uff0c\u800c\u4e0d\u662f\u5728 \/spiffs\/tmp \u4e0b\u751f\u6210\u540d\u4e3a myfile.txt \u7684\u6587\u4ef6\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.1 \u5982\u4f55\u505aESP32 Arduino\u6846\u67b6\u4e0b\u4f7f\u7528SPIFFS<\/h4>\n\n\n\n<p><strong>\uff081\uff09 ESP32 FLASH \u5206\u533a<\/strong><\/p>\n\n\n\n<p>\u5206\u533a\u8868\uff08Partition Table\uff09\u662f\u4e00\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u7528\u4e8e\u5728\u5d4c\u5165\u5f0f\u7cfb\u7edf\u4e2d\u7ba1\u7406\u5b58\u50a8\u8bbe\u5907\u7684\u903b\u8f91\u5206\u533a\u3002\u5b83\u5b9a\u4e49\u4e86\u5b58\u50a8\u8bbe\u5907\u4e0a\u4e0d\u540c\u903b\u8f91\u5206\u533a\u7684\u8d77\u59cb\u4f4d\u7f6e\u3001\u5927\u5c0f\u548c\u5c5e\u6027\u3002<\/p>\n\n\n\n<p>\u5206\u533a\u8868\u901a\u5e38\u88ab\u7528\u4e8e\u78c1\u76d8\u9a71\u52a8\u5668\u3001\u56fa\u6001\u786c\u76d8\u3001\u95ea\u5b58\u7b49\u5b58\u50a8\u8bbe\u5907\uff0c\u4ee5\u4fbf\u5c06\u5b58\u50a8\u7a7a\u95f4\u5212\u5206\u4e3a\u591a\u4e2a\u903b\u8f91\u533a\u57df\u3002\u6bcf\u4e2a\u903b\u8f91\u5206\u533a\u53ef\u4ee5\u88ab\u683c\u5f0f\u5316\u4e3a\u4e0d\u540c\u7684\u6587\u4ef6\u7cfb\u7edf\uff0c\u5e76\u7528\u4e8e\u5b58\u50a8\u4e0d\u540c\u7c7b\u578b\u7684\u6570\u636e\u3002<\/p>\n\n\n\n<p>\u5728\u5206\u533a\u8868\u4e2d\uff0c\u6bcf\u4e2a\u5206\u533a\u90fd\u6709\u4e00\u4e9b\u5173\u952e\u4fe1\u606f\uff0c\u4f8b\u5982\uff1a<\/p>\n\n\n\n<p><strong>\u8d77\u59cb\u5730\u5740\uff08Start Address\uff09\uff1a<\/strong>\u5206\u533a\u5728\u5b58\u50a8\u8bbe\u5907\u4e0a\u7684\u8d77\u59cb\u4f4d\u7f6e\u3002<\/p>\n\n\n\n<p><strong>\u5927\u5c0f\uff08Size\uff09\uff1a<\/strong>\u5206\u533a\u7684\u5927\u5c0f\uff0c\u5373\u5206\u533a\u6240\u5360\u636e\u7684\u5b58\u50a8\u7a7a\u95f4\u3002<\/p>\n\n\n\n<p><strong>\u7c7b\u578b\uff08Type\uff09\uff1a<\/strong>\u5206\u533a\u7684\u7c7b\u578b\u6216\u6807\u8bc6\u7b26\uff0c\u7528\u4e8e\u8868\u793a\u5206\u533a\u7684\u7528\u9014\u6216\u6587\u4ef6\u7cfb\u7edf\u7c7b\u578b\u3002<\/p>\n\n\n\n<p><strong>\u5c5e\u6027\uff08Attributes\uff09\uff1a<\/strong>\u5206\u533a\u7684\u5c5e\u6027\uff0c\u5982\u662f\u5426\u53ef\u5f15\u5bfc\u3001\u53ea\u8bfb\u7b49\u3002<\/p>\n\n\n\n<p>\u5206\u533a\u8868\u901a\u5e38\u5b58\u50a8\u5728\u5b58\u50a8\u8bbe\u5907\u7684\u7279\u5b9a\u4f4d\u7f6e\uff0c\u4f8b\u5982\u786c\u76d8\u7684\u4e3b\u5f15\u5bfc\u8bb0\u5f55\uff08MBR\uff09\u6216GUID\u5206\u533a\u8868\uff08GPT\uff09\u4e2d\u3002\u64cd\u4f5c\u7cfb\u7edf\u6216\u5f15\u5bfc\u52a0\u8f7d\u7a0b\u5e8f\u53ef\u4ee5\u8bfb\u53d6\u5206\u533a\u8868\u4fe1\u606f\uff0c\u5e76\u6839\u636e\u9700\u8981\u8bbf\u95ee\u6216\u64cd\u4f5c\u4e0d\u540c\u7684\u5206\u533a\u3002<\/p>\n\n\n\n<p>\u4f7f\u7528\u5206\u533a\u8868\u53ef\u4ee5\u63d0\u4f9b\u66f4\u7075\u6d3b\u7684\u5b58\u50a8\u7a7a\u95f4\u7ba1\u7406\uff0c\u4f7f\u5d4c\u5165\u5f0f\u7cfb\u7edf\u80fd\u591f\u652f\u6301\u591a\u4e2a\u4e0d\u540c\u7c7b\u578b\u7684\u6587\u4ef6\u7cfb\u7edf\u548c\u6570\u636e\u5b58\u50a8\u9700\u6c42\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,  0x2000,\napp0,     app,  ota_0,   0x10000, 0x600000,\napp1,     app,  ota_1,   0x610000,0x600000,\nspiffs,   data, spiffs,  0xC10000,0x3E0000,\ncoredump, data, coredump,0xFF0000,0x10000,<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"177\" src=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-51.png\" alt=\"\" class=\"wp-image-869\" srcset=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-51.png 524w, https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-51-300x101.png 300w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/figure>\n<\/div>\n\n\n<p>nvs: \u7528\u4e8e\u5b58\u50a8\u975e\u6613\u5931\u6027\u6570\u636e (Non-Volatile Storage)\uff0c\u4f8b\u5982\u914d\u7f6e\u53c2\u6570\u3002<\/p>\n\n\n\n<p>otadata: \u7528\u4e8e\u5b58\u50a8OTA (Over-the-Air) \u66f4\u65b0\u76f8\u5173\u7684\u6570\u636e\u3002<\/p>\n\n\n\n<p>app0: \u5e94\u7528\u7a0b\u5e8f\u7684\u7b2c\u4e00\u4e2a\u56fa\u4ef6\u5206\u533a\uff0c\u7528\u4e8e\u5b58\u50a8\u4e3b\u8981\u7684\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u3002<\/p>\n\n\n\n<p>app1: \u5e94\u7528\u7a0b\u5e8f\u7684\u7b2c\u4e8c\u4e2a\u56fa\u4ef6\u5206\u533a\uff0c\u5e38\u7528\u4e8e\u8fdb\u884c\u56fa\u4ef6\u5347\u7ea7\u65f6\u7684\u5907\u4efd\u3002<\/p>\n\n\n\n<p>spiffs: SPI Flash \u6587\u4ef6\u7cfb\u7edf\uff0c\u7528\u4e8e\u5b58\u50a8\u5e94\u7528\u7a0b\u5e8f\u7684\u6587\u4ef6\u6570\u636e\u3002<\/p>\n\n\n\n<p>coredump: \u5b58\u50a8\u6838\u5fc3\u8f6c\u50a8\u6587\u4ef6\uff0c\u7528\u4e8e\u8bb0\u5f55\u7a0b\u5e8f\u5728\u53d1\u751f\u5f02\u5e38\u6216\u5d29\u6e83\u65f6\u7684\u72b6\u6001\u4fe1\u606f\u3002<\/p>\n\n\n\n<p>\u5e38\u89c1\u5206\u533a\u6709\uff1a<\/p>\n\n\n\n<p>\u2460 \u5e94\u7528\u7a0b\u5e8f\u5206\u533a\uff08Type=app\uff09<\/p>\n\n\n\n<p>factory\uff1a\u51fa\u5382\u56fa\u4ef6\u5206\u533a\uff0c\u7cfb\u7edf\u9996\u6b21\u542f\u52a8\u65f6\u52a0\u8f7d<\/p>\n\n\n\n<p>ota_0\/ota_1\uff1aOTA \u5347\u7ea7\u5206\u533a\uff0c\u7528\u4e8e\u5b58\u653e\u65b0\u7248\u672c\u56fa\u4ef6<\/p>\n\n\n\n<p>test\uff1a\u6d4b\u8bd5\u56fa\u4ef6\u5206\u533a\uff0c\u7528\u4e8e\u9a8c\u8bc1\u65b0\u529f\u80fd<\/p>\n\n\n\n<p>\u2461 \u6570\u636e\u5206\u533a\uff08Type=data\uff09<\/p>\n\n\n\n<p>nvs\uff1a\u975e\u6613\u5931\u6027\u5b58\u50a8\uff0c\u4fdd\u5b58\u914d\u7f6e\u53c2\u6570\uff08\u5982 WiFi \u5bc6\u7801\uff09<\/p>\n\n\n\n<p>phy\uff1aWiFi\/BLE \u7269\u7406\u5c42\u6821\u51c6\u6570\u636e<\/p>\n\n\n\n<p>spiffs\/fatfs\uff1a\u6587\u4ef6\u7cfb\u7edf\u5206\u533a\uff0c\u5b58\u50a8\u7528\u6237\u6587\u4ef6<\/p>\n\n\n\n<p>nvs_keys\uff1aNVS \u52a0\u5bc6\u5bc6\u94a5\u5b58\u50a8\u533a<\/p>\n\n\n\n<p>\u2462 \u7279\u6b8a\u5206\u533a<\/p>\n\n\n\n<p>efuse\uff1a\u5b58\u50a8\u4e00\u6b21\u6027\u53ef\u7f16\u7a0b\u53c2\u6570\uff08\u5982\u82af\u7247 ID\u3001\u5b89\u5168\u5bc6\u94a5\uff09<\/p>\n\n\n\n<p>otadata\uff1aOTA \u6570\u636e\u5206\u533a\uff0c\u8bb0\u5f55\u5f53\u524d\u6d3b\u52a8\u5206\u533a<\/p>\n\n\n\n<p>\u6211\u4eec\u5728\u914d\u7f6e\u5206\u533a\u662f\u4e00\u822c\u53ea\u9009\u62e9app\u548cdata\u4e24\u79cd\u7c7b\u578b\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"818\" height=\"260\" src=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-52.png\" alt=\"\" class=\"wp-image-870\" srcset=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-52.png 818w, https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-52-300x95.png 300w, https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-52-768x244.png 768w\" sizes=\"auto, (max-width: 818px) 100vw, 818px\" \/><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">\uff082\uff09\u64cd\u4f5c\u6b65\u9aa4<\/h4>\n\n\n\n<p>\u2460 \u5efa\u7acb\u6587\u4ef6\uff08\u540e\u7f00.csv\uff09<\/p>\n\n\n\n<p>\u5982\u4e0b\uff08\u793a\u4f8b\uff09\uff1a\u5728ESP32\u9879\u76ee\u76ee\u5f55\u4e0b\u5efa\u7acb\u6587\u4ef6\uff08\u540e\u7f00.csv\uff09<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"410\" height=\"710\" src=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-53.png\" alt=\"\" class=\"wp-image-871\" srcset=\"https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-53.png 410w, https:\/\/aimc.skyate.com\/wp-content\/uploads\/2025\/06\/image-53-173x300.png 173w\" sizes=\"auto, (max-width: 410px) 100vw, 410px\" \/><\/figure>\n<\/div>\n\n\n<p>\u2461 \u5f15\u5165.csv\u6587\u4ef6<\/p>\n\n\n\n<p>\u5728Platformio.ini\u914d\u7f6e\u4e2d\u5f15\u5165.csv\u6587\u4ef6<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[env:adafruit_feather_esp32s3]\nplatform = espressif32\nboard = esp32-s3-devkitc-1\nframework = arduino\nboard_build.partitions = config_flash.csv\nboard_build.arduino.memory_type = qio_opi\nboard_upload.flash_size = 16MB\nbuild_flags = -DBOARD_HAS_PSRAM\n    -DARDUINO_USB_CDC_ON_BOOT=1\n    -DCORE_DEBUG_LEVEL=1\nmonitor_speed = 115200<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.2 SPIFFS\u7684API\u63a5\u53e3<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u5728arduino\u5e73\u53f0\u4e0aSPIFFS\u5e38\u89c1API\u7684\u4f5c\u7528\u3001\u5f62\u53c2\u3001\u8fd4\u56de\u503c\u53ca\u4f7f\u7528\u4ecb\u7ecd\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5e38\u89c1API\u63a5\u53e3<\/h3>\n\n\n\n<p><strong>\uff081\uff09SPIFFS.begin()<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f5c\u7528<\/strong> \uff1a\u6302\u8f7dSPIFFS\u6587\u4ef6\u7cfb\u7edf\uff0c\u5f00\u59cb\u4f7f\u7528SPIFFS\u3002<\/li>\n\n\n\n<li><strong>\u5f62\u53c2<\/strong> \uff1a<code>bool formatOnFail = true, const char *basePath = \"\/spiffs\", uint8_t maxOpenFiles =5, bool formatIfMountFailed = false<\/code> \u3002\u5176\u4e2d\uff1a\n<ul class=\"wp-block-list\">\n<li><code>formatOnFail<\/code> \uff1a\u6307\u5b9a\u5982\u679c\u6302\u8f7d\u5931\u8d25\u662f\u5426\u8fdb\u884c\u683c\u5f0f\u5316\uff0c\u9ed8\u8ba4\u4e3a<code>true<\/code>\u3002<\/li>\n\n\n\n<li><code>basePath<\/code> \uff1a\u6307\u5b9a\u6587\u4ef6\u7cfb\u7edf\u7684\u6302\u8f7d\u70b9\uff0c\u9ed8\u8ba4\u4e3a<code>\"spiffs\"<\/code> \u3002<\/li>\n\n\n\n<li><code>maxOpenFiles<\/code> \uff1a\u6307\u5b9a\u5141\u8bb8\u540c\u65f6\u6253\u5f00\u7684\u6587\u4ef6\u6700\u5927\u6570\u91cf\uff0c\u9ed8\u8ba4\u4e3a5\u3002<\/li>\n\n\n\n<li><code>formatIfMountFailed<\/code> \uff1a\u6307\u5b9a\u5982\u679c\u6302\u8f7d\u5931\u8d25\u662f\u5426\u8fdb\u884c\u683c\u5f0f\u5316\uff0c\u9ed8\u8ba4\u4e3a<code>false<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u6302\u8f7d\u6210\u529f\u8fd4\u56de<code>true<\/code>\uff0c\u5426\u5219\u8fd4\u56de<code>false<\/code>\u3002<\/p>\n\n\n\n<p><strong>\uff082\uff09<\/strong><strong>SPIFFS.end()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u5378\u8f7dSPIFFS\u6587\u4ef6\u7cfb\u7edf\uff0c\u505c\u6b62\u4f7f\u7528SPIFFS\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a\u65e0\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u65e0 \u3002<\/p>\n\n\n\n<p><strong>\uff083\uff09SPIFFS.format()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u683c\u5f0f\u5316SPIFFS\u6587\u4ef6\u7cfb\u7edf\u3002\u683c\u5f0f\u5316\u540e\u4f1a\u6e05\u9664\u6587\u4ef6\u7cfb\u7edf\u4e2d\u7684\u6240\u6709\u6570\u636e\uff0c\u4f46\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u5982\u6587\u4ef6\u7cfb\u7edf\u635f\u574f\u6216\u9700\u8981\u91cd\u65b0\u7ec4\u7ec7\u5b58\u50a8\u7a7a\u95f4\u65f6\uff0c\u53ef\u80fd\u9700\u8981\u8fdb\u884c\u683c\u5f0f\u5316\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a\u65e0\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u683c\u5f0f\u5316\u6210\u529f\u8fd4\u56de<code>true<\/code>\uff0c\u5426\u5219\u8fd4\u56de<code>false<\/code>\u3002<\/p>\n\n\n\n<p><strong>\uff084\uff09<\/strong><strong>SPIFFS.open()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u6253\u5f00\u4e00\u4e2a\u6587\u4ef6\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a<code>const char *filename, const char *mode = \"r\"<\/code>\u3002\u5176\u4e2d\uff1a<\/p>\n\n\n\n<p>* <code>filename<\/code> \uff1a\u6307\u5b9a\u8981\u6253\u5f00\u7684\u6587\u4ef6\u540d\u3002<\/p>\n\n\n\n<p>* <code>mode<\/code> \uff1a\u6307\u5b9a\u6253\u5f00\u6a21\u5f0f\uff0c\u9ed8\u8ba4\u4e3a\u53ea\u8bfb\u6a21\u5f0f<code>\"r\"<\/code>\uff0c\u5176\u4ed6\u5e38\u89c1\u6a21\u5f0f\u5305\u62ec\u53ea\u5199\u6a21\u5f0f<code>\"w\"<\/code>\u3001\u8bfb\u5199\u6a21\u5f0f<code>\"r+\"<\/code>\u7b49\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u8fd4\u56de\u4e00\u4e2a<code>File<\/code>\u5bf9\u8c61\uff0c\u7528\u4e8e\u540e\u7eed\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p><strong>\uff085\uff09<\/strong><strong>SPIFFS.exists()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u5224\u65ad\u4e00\u4e2a\u6587\u4ef6\u662f\u5426\u5b58\u5728\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a<code>const char *path<\/code>\uff0c\u6307\u5b9a\u8981\u5224\u65ad\u7684\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u6587\u4ef6\u5b58\u5728\u8fd4\u56de<code>true<\/code>\uff0c\u5426\u5219\u8fd4\u56de<code>false<\/code>\u3002<\/p>\n\n\n\n<p><strong>\uff086\uff09<\/strong><strong>SPIFFS.remove()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u5220\u9664\u4e00\u4e2a\u6587\u4ef6\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a<code>const char *path<\/code>\uff0c\u6307\u5b9a\u8981\u5220\u9664\u7684\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u5220\u9664\u6210\u529f\u8fd4\u56de<code>true<\/code>\uff0c\u5426\u5219\u8fd4\u56de<code>false<\/code>\u3002<\/p>\n\n\n\n<p><strong>\uff087\uff09SPIFFS.rename()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u91cd\u547d\u540d\u6587\u4ef6\u6216\u76ee\u5f55\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a<code>const char *oldPath, const char *newPath<\/code>\u3002\u5176\u4e2d\uff1a<\/p>\n\n\n\n<p>* <code>oldPath<\/code> \uff1a\u6307\u5b9a\u8981\u91cd\u547d\u540d\u7684\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u539f\u59cb\u8def\u5f84\u3002<\/p>\n\n\n\n<p>* <code>newPath<\/code> \uff1a\u6307\u5b9a\u91cd\u547d\u540d\u540e\u7684\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u8def\u5f84\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u91cd\u547d\u540d\u6210\u529f\u8fd4\u56de<code>true<\/code>\uff0c\u5426\u5219\u8fd4\u56de<code>false<\/code><\/p>\n\n\n\n<p><strong>\uff088\uff09SPIFFS.mkdir()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u521b\u5efa\u76ee\u5f55\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a<code>const char *path<\/code>\uff0c\u6307\u5b9a\u8981\u521b\u5efa\u7684\u76ee\u5f55\u8def\u5f84\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u521b\u5efa\u6210\u529f\u8fd4\u56de<code>true<\/code>\uff0c\u5426\u5219\u8fd4\u56de<code>false<\/code><\/p>\n\n\n\n<p><strong>\uff089\uff09SPIFFS.rmdir()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u5220\u9664\u76ee\u5f55\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a<code>const char *path<\/code>\uff0c\u6307\u5b9a\u8981\u5220\u9664\u7684\u76ee\u5f55\u8def\u5f84\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u5220\u9664\u6210\u529f\u8fd4\u56de<code>true<\/code>\uff0c\u5426\u5219\u8fd4\u56de<code>false<\/code><\/p>\n\n\n\n<p><strong>\uff0810\uff09SPIFFSFileSize()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u83b7\u53d6\u6587\u4ef6\u7684\u5927\u5c0f\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a<code>const char *path<\/code>\uff0c\u6307\u5b9a\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u8fd4\u56de\u6587\u4ef6\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u4e3a\u5b57\u8282\u3002<\/p>\n\n\n\n<p><strong>\uff0811\uff09SPIFFS.totalBytes()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u83b7\u53d6\u6587\u4ef6\u7cfb\u7edf\u7684\u603b\u5b57\u8282\u6570\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a\u65e0\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u8fd4\u56de\u6587\u4ef6\u7cfb\u7edf\u7684\u603b\u5b57\u8282\u6570\u3002<\/p>\n\n\n\n<p><strong>\uff0812\uff09<\/strong><strong>SPIFFS.usedBytes()<\/strong><\/p>\n\n\n\n<p>* <strong>\u4f5c\u7528<\/strong> \uff1a\u83b7\u53d6\u6587\u4ef6\u7cfb\u7edf\u5df2\u4f7f\u7528\u7684\u5b57\u8282\u6570\u3002<\/p>\n\n\n\n<p>* <strong>\u5f62\u53c2<\/strong> \uff1a\u65e0\u3002<\/p>\n\n\n\n<p>* <strong>\u8fd4\u56de\u503c<\/strong> \uff1a\u8fd4\u56de\u6587\u4ef6\u7cfb\u7edf\u5df2\u4f7f\u7528\u7684\u5b57\u8282\u6570\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f7f\u7528\u6b65\u9aa4<\/h3>\n\n\n\n<p><strong>\uff081\uff09\u5305\u542b\u5934\u6587\u4ef6<\/strong> \uff1a\u5728\u4ee3\u7801\u4e2d\u5305\u542b<code>FS.h<\/code>\u5934\u6587\u4ef6\uff0c\u5373<code>#include \"FS.h\"<\/code>\u3002<\/p>\n\n\n\n<p><strong>\uff082\uff09\u521d\u59cb\u5316SPIFFS<\/strong> \uff1a\u5728<code>setup()<\/code>\u51fd\u6570\u4e2d\u8c03\u7528<code>SPIFFS.begin()<\/code>\u6765\u6302\u8f7dSPIFFS\u6587\u4ef6\u7cfb\u7edf\uff0c\u5982\u679c\u6302\u8f7d\u5931\u8d25\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u683c\u5f0f\u5316\u6587\u4ef6\u7cfb\u7edf\u3002\u4f8b\u5982\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>if (!SPIFFS.begin()) {<\/code><\/li>\n\n\n\n<li><code>SPIFFS.format();<\/code><\/li>\n\n\n\n<li><code>SPIFFS.begin();<\/code><\/li>\n\n\n\n<li><code>}<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>\uff083\uff09\u6587\u4ef6\u64cd\u4f5c<\/strong> \uff1a\u4f7f\u7528\u4e0a\u8ff0\u7684\u6587\u4ef6\u64cd\u4f5cAPI\u8fdb\u884c\u6587\u4ef6\u7684\u521b\u5efa\u3001\u8bfb\u5199\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002\u4f8b\u5982\uff0c\u6253\u5f00\u4e00\u4e2a\u6587\u4ef6\u8fdb\u884c\u5199\u5165\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<p>* <code>File file = SPIFFS.open(\"\/test.txt\", \"w\");<\/code><\/p>\n\n\n\n<p>* <code>if (file) {<\/code><\/p>\n\n\n\n<p>* <code>file.println(\"Hello, SPIFFS!\");<\/code><\/p>\n\n\n\n<p>* <code>file.close();<\/code><\/p>\n\n\n\n<p>* <code>}<\/code><\/p>\n\n\n\n<p><strong>\uff084\uff09\u4e0a\u4f20\u6587\u4ef6<\/strong> \uff1a\u5982\u679c\u9700\u8981\u5c06\u6587\u4ef6\u4e0a\u4f20\u5230SPIFFS\uff0c\u53ef\u4ee5\u5c06\u6587\u4ef6\u653e\u5728Arduino\u9879\u76ee\u7684<code>data<\/code>\u6587\u4ef6\u5939\u4e2d\uff0c\u7136\u540e\u901a\u8fc7<code>ESP8266 Sketch Data Upload<\/code>\u6216<code>ESP32 Sketch Data Upload<\/code>\u529f\u80fd\u8fdb\u884c\u4e0a\u4f20\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6ce8\u610f\u4e8b\u9879<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SPIFFS\u4e0d\u652f\u6301\u76ee\u5f55\uff0c\u6240\u4ee5\u4e0d\u80fd\u521b\u5efa\u5b50\u76ee\u5f55\uff0c\u53ea\u80fd\u5728\u6839\u76ee\u5f55\u4e0b\u64cd\u4f5c\u6587\u4ef6\u3002<\/li>\n\n\n\n<li>SPIFFS\u7684\u6587\u4ef6\u540d\u533a\u5206\u5927\u5c0f\u5199\uff0c\u4e14\u6587\u4ef6\u540d\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7255\u4e2a\u5b57\u7b26\u3002<\/li>\n\n\n\n<li>\u5728\u4f7f\u7528\u6587\u4ef6\u64cd\u4f5cAPI\u65f6\uff0c\u8981\u786e\u4fdd\u6587\u4ef6\u5df2\u6b63\u786e\u6253\u5f00\uff0c\u5426\u5219\u53ef\u80fd\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u6216\u6570\u636e\u4e22\u5931\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include \"FS.h\"\n#include \"SPIFFS.h\"\n\n\/\/ \u5217\u51fa\u6307\u5b9a\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u548c\u5b50\u76ee\u5f55\nvoid listDir(fs::FS &amp;fs, const char * dirname, uint8_t levels){\n    Serial.printf(\"Listing directory: %s\\r\\n\", dirname);\n\n    \/\/ \u6253\u5f00\u76ee\u5f55\n    File root = fs.open(dirname);\n    if(!root){\n        Serial.println(\"- failed to open directory\");\n        return;\n    }\n    \/\/ \u68c0\u67e5\u662f\u5426\u4e3a\u76ee\u5f55\n    if(!root.isDirectory()){\n        Serial.println(\" - not a directory\");\n        return;\n    }\n\n    \/\/ \u6253\u5f00\u76ee\u5f55\u7684\u4e0b\u4e00\u4e2a\u6587\u4ef6\n    File file = root.openNextFile();\n    while(file){\n        if(file.isDirectory()){    \/\/ \u5982\u679c\u662f\u76ee\u5f55\uff0c\u5219\u6253\u5370\u76ee\u5f55\u540d\u5e76\u9012\u5f52\u5217\u51fa\u5b50\u76ee\u5f55\n            Serial.print(\"  DIR : \");\n            Serial.println(file.name());\n            if(levels){\n                listDir(fs, file.path(), levels -1);\n            }\n        } else {            \/\/ \u5982\u679c\u662f\u6587\u4ef6\uff0c\u5219\u6253\u5370\u6587\u4ef6\u540d\u548c\u5927\u5c0f\n            Serial.print(\"  FILE: \");\n            Serial.print(file.name());\n            Serial.print(\"\\tSIZE: \");\n            Serial.println(file.size());\n        }\n        file = root.openNextFile();\n    }\n}\n\n\/\/ \u8bfb\u53d6\u5e76\u663e\u793a\u6587\u4ef6\u5185\u5bb9\nvoid readFile(fs::FS &amp;fs, const char * path){\n    Serial.printf(\"Reading file: %s\\r\\n\", path);    \/\/ \u6253\u5370\u6b63\u5728\u8bfb\u53d6\u7684\u6587\u4ef6\n\n    File file = fs.open(path);   \/\/ \u6253\u5f00\u6587\u4ef6\n    if(!file || file.isDirectory()){\n        Serial.println(\"- failed to open file for reading\");\n        return;\n    }\n\n     \/\/ \u8bfb\u53d6\u5e76\u6253\u5370\u6587\u4ef6\u5185\u5bb9\n    Serial.println(\"- read from file:\");\n    while(file.available()){\n        Serial.write(file.read());    \n    }\n    file.close();\n}\n\n\/\/ \u5199\u5165\u5185\u5bb9\u5230\u6587\u4ef6\uff0c\u5982\u679c\u6587\u4ef6\u4e0d\u5b58\u5728\u5219\u521b\u5efa\nvoid writeFile(fs::FS &amp;fs, const char * path, const char * message){\n    Serial.printf(\"Writing file: %s\\r\\n\", path);\n    \n    \/\/\u6253\u5370\u6b63\u5728\u5199\u7684\u6587\u4ef6\n    File file = fs.open(path, FILE_WRITE);\n    \/\/ \u6253\u5f00\u6587\u4ef6\u7528\u4e8e\u5199\u5165\n    if(!file){\n        Serial.println(\"- failed to open file for writing\");\n        return;\n    }\n    if(file.print(message)){\n        Serial.println(\"- file written\");\n    } else {\n        Serial.println(\"- write failed\");\n    }\n    file.close();\n}\n\n\/\/ \u5411\u6587\u4ef6\u8ffd\u52a0\u5185\u5bb9\nvoid appendFile(fs::FS &amp;fs, const char * path, const char * message){\n    Serial.printf(\"Appending to file: %s\\r\\n\", path);\n\n    File file = fs.open(path, FILE_APPEND);\n    if(!file){\n        Serial.println(\"- failed to open file for appending\");\n        return;\n    }\n    if(file.print(message)){\n        Serial.println(\"- message appended\");\n    } else {\n        Serial.println(\"- append failed\");\n    }\n    file.close();\n}\n\nvoid renameFile(fs::FS &amp;fs, const char * path1, const char * path2){\n    Serial.printf(\"Renaming file %s to %s\\r\\n\", path1, path2);\n    if (fs.rename(path1, path2)) {\n        Serial.println(\"- file renamed\");\n    } else {\n        Serial.println(\"- rename failed\");\n    }\n}\n\nvoid deleteFile(fs::FS &amp;fs, const char * path){\n    Serial.printf(\"Deleting file: %s\\r\\n\", path);\n    if(fs.remove(path)){\n        Serial.println(\"- file deleted\");\n    } else {\n        Serial.println(\"- delete failed\");\n    }\n}\n\n\/\/\u51fd\u6570\u663e\u793a\u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9\u6240\u9700\u7684\u65f6\u95f4\nvoid testFileIO(fs::FS &amp;fs, const char * path){\n    Serial.printf(\"Testing file I\/O with %s\\r\\n\", path);\n\n    static uint8_t buf[512];\n    size_t len = 0;\n    File file = fs.open(path, FILE_WRITE);\n    if(!file){\n        Serial.println(\"- failed to open file for writing\");\n        return;\n    }\n\n    size_t i;\n    Serial.print(\"- writing\" );\n    uint32_t start = millis();\n    for(i=0; i&lt;2048; i++){\n        if ((i &amp; 0x001F) == 0x001F){\n          Serial.print(\".\");\n        }\n        file.write(buf, 512);\n    }\n    Serial.println(\"\");\n    uint32_t end = millis() - start;\n    Serial.printf(\" - %u bytes written in %u ms\\r\\n\", 2048 * 512, end);\n    file.close();\n\n    file = fs.open(path);\n    start = millis();\n    end = start;\n    i = 0;\n    if(file &amp;&amp; !file.isDirectory()){\n        len = file.size();\n        size_t flen = len;\n        start = millis();\n        Serial.print(\"- reading\" );\n        while(len){\n            size_t toRead = len;\n            if(toRead > 512){\n                toRead = 512;\n            }\n            file.read(buf, toRead);\n            if ((i++ &amp; 0x001F) == 0x001F){\n              Serial.print(\".\");\n            }\n            len -= toRead;\n        }\n        Serial.println(\"\");\n        end = millis() - start;\n        Serial.printf(\"- %u bytes read in %u ms\\r\\n\", flen, end);\n        file.close();\n    } else {\n        Serial.println(\"- failed to open file for reading\");\n    }\n}\n \n\/\/ \u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u76ee\u5f55\nvoid createDir(fs::FS &amp;fs, const char * path){\n  \/\/ \u6253\u5370\u6b63\u5728\u521b\u5efa\u7684\u76ee\u5f55\n  Serial.printf(\"Creating Dir: %s\\n\", path);\n  if(fs.mkdir(path)){\n  \/\/ \u5c1d\u8bd5\u521b\u5efa\u76ee\u5f55\uff0c\u5982\u679c\u6210\u529f\u5219\u6253\u5370\u6210\u529f\u4fe1\u606f\uff0c\u5426\u5219\u6253\u5370\u5931\u8d25\u4fe1\u606f\n      Serial.println(\"Dir created\");\n  } else {\n      Serial.println(\"mkdir failed\");\n  }\n}\n\n\/\/ \u5220\u9664\u4e00\u4e2a\u76ee\u5f55\u53ca\u5176\u6240\u6709\u5185\u5bb9\nvoid removeDir(fs::FS &amp;fs, const char * path){\n  Serial.printf(\"Removing Dir: %s\\n\", path);\n  if(fs.rmdir(path)){\n  \/\/ \u5c1d\u8bd5\u5220\u9664\u76ee\u5f55\uff0c\u5982\u679c\u6210\u529f\u5219\u6253\u5370\u6210\u529f\u4fe1\u606f\uff0c\u5426\u5219\u6253\u5370\u5931\u8d25\u4fe1\u606f\n      Serial.println(\"Dir removed\");\n  } else {\n      Serial.println(\"rmdir failed\");\n  }\n}\n\nvoid setup(){\n    Serial.begin(115200);\n    sys_delay_ms(3000);\n    if(!SPIFFS.begin()){    \n        Serial.println(\"SPIFFS Mount Failed\");\n        return;\n    }\n\n  listDir(SPIFFS, \"\/\", 0);  \n  readFile(SPIFFS, \"\/system.json\");\n  readFile(SPIFFS, \"\/wifi.html\");\n  \n  \n}\n\nvoid loop(){\n\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2 ArduinoJSON<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u4ec0\u4e48\u662fJSON\uff1f<\/h3>\n\n\n\n<p><strong>JSON<\/strong><strong>: <\/strong><strong>J<\/strong><strong>ava<\/strong><strong>S<\/strong><strong>cript <\/strong><strong>O<\/strong><strong>bject <\/strong><strong>N<\/strong><strong>otation<\/strong><strong>\uff08<\/strong><strong>JavaScript<\/strong><strong> \u5bf9\u8c61\u6807\u8bb0\u6cd5\uff09\u3002<\/strong><\/p>\n\n\n\n<p><strong>JSON<\/strong><strong> \u662f\u4e00\u79cd<\/strong><strong>\u5b58\u50a8<\/strong><strong>\u548c<\/strong><strong>\u4ea4\u6362<\/strong><strong>\u6570\u636e\u7684\u8bed\u6cd5\u683c\u5f0f\u3002\u6613\u4e8e\u9605\u8bfb\u548c\u7f16\u5199\uff0c\u540c\u65f6\u4e5f\u6613\u4e8e\u673a\u5668\u89e3\u6790\u548c\u751f\u6210\u3002<\/strong><\/p>\n\n\n\n<p><strong>JSON<\/strong><strong> \u662f\u901a\u8fc7 <\/strong><strong>JavaScript<\/strong><strong> \u5bf9\u8c61\u6807\u8bb0\u6cd5\u4e66\u5199\u7684\u6587\u672c\u3002<\/strong><\/p>\n\n\n\n<p><strong>\uff081\uff09 <\/strong><strong>JSON<\/strong><strong>\u7528\u4e8e\u6570\u636e\u4ea4\u6362<\/strong><\/p>\n\n\n\n<p>\u6700\u5f00\u59cb\uff0cJSON\u8d77\u6e90\u4e8e\u5f53\u6570\u636e\u5728\u6d4f\u89c8\u5668\u4e0e\u670d\u52a1\u5668\u4e4b\u95f4\u7684\u6570\u636e\u901a\u4fe1\u3002\u5f53\u4e8c\u8005\u8fdb\u884c\u4ea4\u6362\u65f6\uff0c\u8fd9\u4e9b<strong>\u6570\u636e\u53ea\u80fd\u662f\u6587\u672c<\/strong>\u3002JSON \u5c5e\u4e8e\u6587\u672c\uff0c\u5e76\u4e14\u6211\u4eec\u80fd\u591f\u628a\u4efb\u4f55 JavaScript \u5bf9\u8c61\u8f6c\u6362\u4e3a JSON\uff0c\u7136\u540e\u5c06 JSON \u53d1\u9001\u5230\u670d\u52a1\u5668\u3002\u6211\u4eec\u4e5f\u80fd\u628a\u4ece\u670d\u52a1\u5668\u63a5\u6536\u5230\u7684\u4efb\u4f55 JSON \u8f6c\u6362\u4e3a JavaScript \u5bf9\u8c61\u3002\u4ee5\u8fd9\u6837\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u80fd\u591f\u628a\u6570\u636e\u4f5c\u4e3a JavaScript \u5bf9\u8c61\u6765\u5904\u7406\uff0c\u65e0\u9700\u590d\u6742\u7684\u89e3\u6790\u548c\u8f6c\u8bd1\u3002<\/p>\n\n\n\n<p>JSON\u540e\u6765\u4e5f\u8d8a\u6765\u8d8a\u591a\u7684\u7528\u4e8e\u8bbe\u5907\u4e0e\u8bbe\u5907\u4e4b\u95f4\u7684\u6570\u636e\u4ea4\u6362\u4e1a\u52a1\u3002\u5404\u79cd\u8bed\u8a00\u5e73\u53f0\u4e0a\u90fd\u6709\u5bf9\u5e94\u7684JSON\u89e3\u6790\u5e93\u3002<\/p>\n\n\n\n<p><strong>\uff082\uff09\u5b58\u50a8\u6570\u636e<\/strong><\/p>\n\n\n\n<p>\u5728\u5b58\u50a8\u6570\u636e\u65f6\uff0c\u6570\u636e\u5fc5\u987b\u662f\u67d0\u79cd\u5177\u4f53\u7684\u683c\u5f0f\uff0c\u5e76\u4e14\u65e0\u8bba\u60a8\u9009\u62e9\u5728\u4f55\u5904\u5b58\u50a8\u5b83\uff0c\u6587\u672c\u6c38\u8fdc\u662f\u5408\u6cd5\u683c\u5f0f\u4e4b\u4e00\u3002<\/p>\n\n\n\n<p>JSON \u8ba9 JavaScript \u5bf9\u8c61\u5b58\u50a8\u4e3a\u6587\u672c\u6210\u4e3a\u53ef\u80fd\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.2 <\/strong><strong>JSON<\/strong><strong> \u8bed\u6cd5\u89c4\u5219<\/strong><\/h3>\n\n\n\n<p>JSON \u8bed\u6cd5\u884d\u751f\u4e8e JavaScript \u5bf9\u8c61\u6807\u8bb0\u6cd5\u8bed\u6cd5\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6570\u636e\u5728\u540d\u79f0\/\u503c\u5bf9\u4e2d<\/li>\n\n\n\n<li>\u6570\u636e\u7531\u9017\u53f7\u5206\u9694<\/li>\n\n\n\n<li>\u82b1\u62ec\u53f7\u5bb9\u7eb3\u5bf9\u8c61<\/li>\n\n\n\n<li>\u65b9\u62ec\u53f7\u5bb9\u7eb3\u6570\u7ec4<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u8c61 \uff1a\u5bf9\u8c61\u662f\u4e00\u4e2a\u65e0\u5e8f\u7684\u952e \/ \u503c\u5bf9\u96c6\u5408\u3002\u952e\u548c\u503c\u4e4b\u95f4\u7528\u5192\u53f7\u5206\u9694\uff0c\u952e \/ \u503c\u5bf9\u4e4b\u95f4\u7528\u9017\u53f7\u5206\u9694\uff0c\u6574\u4e2a\u5bf9\u8c61\u7528\u5927\u62ec\u53f7 <code>{}<\/code> \u5305\u88f9\u3002\u4f8b\u5982\uff1a<code>{\"name\": \"John\", \"age\": 30}<\/code>\u3002<\/li>\n\n\n\n<li>\u6570\u7ec4 \uff1a\u6570\u7ec4\u662f\u4e00\u4e2a\u6709\u5e8f\u7684\u503c\u96c6\u5408\uff0c\u503c\u4e4b\u95f4\u7528\u9017\u53f7\u5206\u9694\uff0c\u6574\u4e2a\u6570\u7ec4\u7528\u65b9\u62ec\u53f7 <code>[]<\/code> \u5305\u88f9\u3002\u4f8b\u5982\uff1a<code>[\"apple\", \"banana\", \"orange\"]<\/code>\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\uff081\uff09<\/strong><strong>JSON<\/strong><strong> \u6570\u636e- \u540d\u79f0<\/strong><strong>\u548c\u503c<\/strong><\/p>\n\n\n\n<p>JSON \u6570\u636e\u5199\u4e3a\u540d\u79f0\/\u503c\u5bf9\u3002\u540d\u79f0\/\u503c\u7531\u5b57\u6bb5\u540d\u79f0\u6784\u6210\uff0c\u540e\u8ddf\u5192\u53f7\u548c\u503c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"name\":\"Bill Gates\"<\/pre>\n\n\n\n<p>\u5728 JSON \u4e2d\uff0c<strong>\u952e\u5fc5\u987b\u662f\u5b57\u7b26\u4e32\uff0c\u7531\u53cc\u5f15\u53f7\u5305\u56f4<\/strong>\u3002<\/p>\n\n\n\n<p><strong>\uff082\uff09 <\/strong><strong>JSON<\/strong><strong> \u503c<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b57\u7b26\u4e32 \uff1a\u5b57\u7b26\u4e32\u662f\u53cc\u5f15\u53f7\u5305\u88f9\u7684\u6587\u672c\u5e8f\u5217\uff0c\u53ef\u4ee5\u5305\u542b Unicode \u5b57\u7b26\u548c\u8f6c\u4e49\u5b57\u7b26\u3002\u4f8b\u5982\uff1a<code>\"Hello, World!\"<\/code>\u3002<\/li>\n\n\n\n<li>\u6570\u5b57 \uff1a\u6570\u5b57\u53ef\u4ee5\u662f\u6574\u6570\u6216\u6d6e\u70b9\u6570\uff0c\u652f\u6301\u79d1\u5b66\u8ba1\u6570\u6cd5\u3002\u4f8b\u5982\uff1a<code>123<\/code>\u3001<code>-45.67<\/code>\u3001<code>1.23e4<\/code>\u3002<\/li>\n\n\n\n<li>\u5e03\u5c14\u503c \uff1a\u5e03\u5c14\u503c\u53ef\u4ee5\u662f <code>true<\/code> \u6216 <code>false<\/code>\u3002<\/li>\n\n\n\n<li>\u7a7a\u503c \uff1a\u7a7a\u503c\u7528 <code>null<\/code> \u8868\u793a\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\uff083\uff09\u4f18\u70b9<\/strong><\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>\u53ef\u8bfb\u6027\u9ad8 \uff1aJSON \u7684\u8bed\u6cd5\u7b80\u6d01\u660e\u4e86\uff0c\u6613\u4e8e\u4eba\u7c7b\u9605\u8bfb\u548c\u7406\u89e3\u3002<\/li>\n\n\n\n<li>\u8f7b\u91cf\u7ea7 \uff1aJSON \u4e0e XML \u76f8\u6bd4\uff0c\u6570\u636e\u5197\u4f59\u66f4\u5c11\uff0c\u4f53\u79ef\u66f4\u5c0f\uff0c\u4f20\u8f93\u6548\u7387\u66f4\u9ad8\u3002<\/li>\n\n\n\n<li>\u8bed\u8a00\u65e0\u5173 \uff1aJSON \u652f\u6301\u591a\u79cd\u7f16\u7a0b\u8bed\u8a00\uff0c\u53ef\u4ee5\u8de8\u5e73\u53f0\u4f7f\u7528\u3002<\/li>\n\n\n\n<li>\u6613\u4e8e\u89e3\u6790\u548c\u751f\u6210 \uff1aJSON \u53ef\u4ee5\u8f7b\u677e\u5730\u5728\u7f16\u7a0b\u8bed\u8a00\u4e2d\u89e3\u6790\u548c\u751f\u6210\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\uff084\uff09\u793a\u4f8b<\/strong><\/p>\n\n\n\n<p><strong>\u7b80\u5355\u7684 <\/strong><strong>JSON<\/strong><strong> \u793a\u4f8b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"name\": \"John\",\n  \"age\": 30,\n  \"hobbies\": [\"reading\", \"traveling\", \"gaming\"]\n}<\/pre>\n\n\n\n<p><strong>\u5d4c\u5957\u7684 <\/strong><strong>JSON<\/strong><strong> \u793a\u4f8b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"name\": \"John\",\n    \"age\": 30,\n    \"address\": \n    {\n        \"street\": \"123 Main St\",\n        \"city\": \"New York\",\n        \"state\": \"NY\"\n    }\n}<\/pre>\n\n\n\n<p>\u63a8\u8350AIMC LAB\u5728\u7ebf\u6821\u9a8c\u5de5\u5177\uff1ahttps:\/\/aimc.skyate.com\/aimc_static\/aimc_tools\/json_checker.html<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 ArduinoJSON\u5e93<\/h3>\n\n\n\n<p>ArduinoJSON\u662f\u4e00\u4e2a\u4e13\u4e3aArduino\u548c\u5d4c\u5165\u5f0fC++\u5e73\u53f0\u8bbe\u8ba1\u7684\u8f7b\u91cf\u7ea7JSON\u5e93\uff0c\u4ee5\u5176\u7b80\u5355\u6613\u7528\u548c\u9ad8\u6548\u6027\u80fd\u8457\u79f0\u3002\u5b83\u652f\u6301JSON\u7684<strong>\u5e8f\u5217\u5316<\/strong>\u548c<strong>\u53cd\u5e8f\u5217\u5316<\/strong>\uff0c\u80fd\u591f\u5728\u6709\u9650\u7684\u5185\u5b58\u73af\u5883\u4e2d\u9ad8\u6548\u5730\u89e3\u6790\u548c\u751f\u6210JSON\u6570\u636e\uff0c\u975e\u5e38\u9002\u5408\u5fae\u63a7\u5236\u5668\u9879\u76ee\u3002<\/p>\n\n\n\n<p><strong>JSON<\/strong><strong>\u5e8f\u5217\u5316<\/strong><\/p>\n\n\n\n<p>JSON\u5e8f\u5217\u5316\u5c31\u662f\u628a\u6570\u636e\u7ed3\u6784\uff08\u5982C++\u4e2d\u7684\u5bf9\u8c61\u3001\u6570\u7ec4\u7b49\uff09\u8f6c\u6362\u6210JSON\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u539f\u7406\uff1a\u6309\u7167JSON\u7684\u8bed\u6cd5\u89c4\u5219\uff0c\u5c06\u6570\u636e\u7ed3\u6784\u4e2d\u7684\u5143\u7d20\u9010\u4e00\u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684\u5b57\u7b26\u4e32\u5f62\u5f0f\u3002\u4f8b\u5982\uff0c\u5c06\u4e00\u4e2a\u5305\u542b\u591a\u4e2a\u952e\u503c\u5bf9\u7684\u5bf9\u8c61\u8f6c\u6362\u4e3a<code>{\u952e1:\u503c1,\u952e2:\u503c2,...}<\/code>\u7684\u683c\u5f0f\uff0c\u5c06\u6570\u7ec4\u8f6c\u6362\u4e3a<code>[\u5143\u7d201,\u5143\u7d202,...]<\/code>\u7684\u683c\u5f0f\u3002<\/li>\n\n\n\n<li>\u4f5c\u7528\uff1a\u65b9\u4fbf\u6570\u636e\u7684\u5b58\u50a8\u548c\u4f20\u8f93\uff0c\u56e0\u4e3a\u5b57\u7b26\u4e32\u683c\u5f0f\u6613\u4e8e\u88ab\u5404\u79cd\u5b58\u50a8\u4ecb\u8d28\uff08\u5982\u6587\u4ef6\u3001\u6570\u636e\u5e93\uff09\u548c\u4f20\u8f93\u534f\u8bae\uff08\u5982HTTP\uff09\u63a5\u6536\u548c\u5904\u7406\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>JSON<\/strong><strong>\u53cd\u5e8f\u5217\u5316<\/strong><\/p>\n\n\n\n<p>JSON\u53cd\u5e8f\u5217\u5316\u5219\u662f\u628aJSON\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u8f6c\u6362\u56de\u539f\u6765\u7684\u6570\u636e\u7ed3\u6784\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u539f\u7406\uff1a\u89e3\u6790JSON\u5b57\u7b26\u4e32\uff0c\u8bc6\u522b\u51fa\u5176\u4e2d\u7684\u5bf9\u8c61\u3001\u6570\u7ec4\u3001\u952e\u503c\u5bf9\u7b49\u5143\u7d20\uff0c\u7136\u540e\u6839\u636e\u8fd9\u4e9b\u5143\u7d20\u91cd\u5efa\u539f\u6765\u7684\u6570\u636e\u7ed3\u6784\u3002<\/li>\n\n\n\n<li>\u4f5c\u7528\uff1a\u5728\u63a5\u6536\u5230JSON\u683c\u5f0f\u7684\u6570\u636e\uff08\u5982\u4ece\u6587\u4ef6\u8bfb\u53d6\u6216\u4ece\u7f51\u7edc\u63a5\u6536\uff09\u540e\uff0c\u5c06\u5176\u8f6c\u6362\u4e3a\u7a0b\u5e8f\u53ef\u4ee5\u76f4\u63a5\u64cd\u4f5c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u4fbf\u4e8e\u540e\u7eed\u7684\u6570\u636e\u5904\u7406\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u6682\u65f6\u65e0\u6cd5\u5728\u98de\u4e66\u6587\u6863\u5916\u5c55\u793a\u6b64\u5185\u5bb9<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.4 ArduinoJSON\u4f7f\u7528<\/h3>\n\n\n\n<p><strong>\uff081\uff09\u521b\u5efa<\/strong><strong>JSON<\/strong><strong>\u5bf9\u8c61<\/strong><\/p>\n\n\n\n<p>\u5728\u4f7f\u7528ArduinoJSON\u5e93\u65f6\uff0c\u9700\u5148\u521b\u5efa\u4e00\u4e2a <code>JsonDocument<\/code> \u5bf9\u8c61\u7528\u4e8e\u5b58\u50a8JSON\u6570\u636e\uff0c\u5b83\u6709\u4e24\u79cd\u7c7b\u578b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>StaticJsonDocument \uff1a\u5728\u6808\u4e0a\u5206\u914d\u56fa\u5b9a\u5927\u5c0f\u7684\u5185\u5b58\uff0c\u9002\u7528\u4e8e\u5b58\u50a8\u8f83\u5c0f\u7684JSON\u6570\u636e\u3002\u9700\u5728\u521b\u5efa\u65f6\u6307\u5b9a\u5185\u5b58\u5927\u5c0f\uff0c\u4f8b\u5982\uff1a<code>StaticJsonDocument&lt;200> doc;<\/code> \u4f1a\u5728\u6808\u4e0a\u5206\u914d200\u5b57\u8282\u7684\u5185\u5b58\u7a7a\u95f4\u3002<\/li>\n\n\n\n<li>DynamicJsonDocument \uff1a\u5728\u5806\u4e0a\u52a8\u6001\u5206\u914d\u5185\u5b58\uff0c\u9002\u7528\u4e8e\u5b58\u50a8\u8f83\u5927\u7684JSON\u6570\u636e\u3002\u540c\u6837\u9700\u8981\u6307\u5b9a\u521d\u59cb\u5185\u5b58\u5927\u5c0f\uff0c\u4f8b\u5982\uff1a<code>DynamicJsonDocument doc(200);<\/code>\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\uff082\uff09<\/strong><strong>\u5e8f\u5217\u5316<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6dfb\u52a0\u6570\u636e\u5230JsonDocument \uff1a\u901a\u8fc7\u64cd\u4f5c <code>JsonDocument<\/code> \u5bf9\u8c61\uff0c\u4f7f\u7528 <code>[]<\/code> \u8fd0\u7b97\u7b26\u6216 <code>add<\/code> \u65b9\u6cd5\u7b49\u5411\u5176\u4e2d\u6dfb\u52a0\u6570\u636e\u3002\u4f8b\u5982\uff1a<code>doc[\"sensor\"] = \"gps\";<\/code> \u5411\u6587\u6863\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u952e\u4e3a \u201csensor\u201d\u3001\u503c\u4e3a \u201cgps\u201d \u7684\u952e\u503c\u5bf9\uff1b<code>JsonArray data = doc.createNestedArray(\"data\"); data.add(48.756080); data.add(2.302038);<\/code> \u521b\u5efa\u4e00\u4e2a\u5d4c\u5957\u6570\u7ec4\u5e76\u6dfb\u52a0\u6570\u636e\u3002<\/li>\n\n\n\n<li>\u5e8f\u5217\u5316\u4e3aJSON\u5b57\u7b26\u4e32 \uff1a\u4f7f\u7528 <code>serializeJson<\/code> \u51fd\u6570\u5c06 <code>JsonDocument<\/code> \u5bf9\u8c61\u5e8f\u5217\u5316\u4e3a\u7d27\u51d1\u7684JSON\u5b57\u7b26\u4e32\uff0c\u6216\u4f7f\u7528 <code>serializeJsonPretty<\/code> \u51fd\u6570\u5e8f\u5217\u5316\u4e3a\u683c\u5f0f\u5316\u7684\u3001\u53ef\u8bfb\u6027\u66f4\u597d\u7684JSON\u5b57\u7b26\u4e32\uff0c\u5e76\u8f93\u51fa\u5230\u6307\u5b9a\u7684\u6d41\uff08\u5982 <code>Serial<\/code>\uff09\u6216\u5b58\u50a8\u5230\u5b57\u7b26\u4e32\u53d8\u91cf\u4e2d\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\uff083\uff09\u53cd\u5e8f\u5217\u5316<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u51c6\u5907JSON\u5b57\u7b26\u4e32 \uff1a\u786e\u4fdd\u8981\u89e3\u6790\u7684JSON\u5b57\u7b26\u4e32\u662f\u6709\u6548\u7684\uff0c\u5e76\u4e14\u5176\u683c\u5f0f\u548c\u5185\u5bb9\u4e0e\u9884\u671f\u7684\u7ed3\u6784\u4e00\u81f4\u3002<\/li>\n\n\n\n<li>\u53cd\u5e8f\u5217\u5316JSON\u5b57\u7b26\u4e32 \uff1a\u8c03\u7528 <code>deserializeJson<\/code> \u51fd\u6570\uff0c\u5c06JSON\u5b57\u7b26\u4e32\u89e3\u6790\u5230\u5df2\u521b\u5efa\u7684 <code>JsonDocument<\/code> \u5bf9\u8c61\u4e2d\u3002\u4f8b\u5982\uff1a<code>DeserializationError error = deserializeJson(doc, json);<\/code> \u5982\u679c\u89e3\u6790\u6210\u529f\uff0c<code>doc<\/code> \u4e2d\u5c06\u5305\u542b\u89e3\u6790\u540e\u7684JSON\u6570\u636e\u3002<\/li>\n\n\n\n<li>\u68c0\u67e5\u89e3\u6790\u9519\u8bef \uff1a\u901a\u8fc7\u68c0\u67e5 <code>deserializeJson<\/code> \u51fd\u6570\u7684\u8fd4\u56de\u503c\u6765\u5224\u65ad\u89e3\u6790\u662f\u5426\u6210\u529f\u3002\u5982\u679c\u8fd4\u56de\u503c\u4e0d\u4e3a <code>DeserializationError::Ok<\/code>\uff0c\u5219\u8868\u793a\u89e3\u6790\u5931\u8d25\uff0c\u53ef\u6839\u636e\u9519\u8bef\u4fe1\u606f\u8fdb\u884c\u76f8\u5e94\u7684\u5904\u7406\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\uff084\uff09\u6570\u636e\u5904\u7406<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u83b7\u53d6\u6570\u636e \uff1a\u4f7f\u7528 <code>JsonDocument<\/code> \u5bf9\u8c61\u7684 <code>[]<\/code> \u8fd0\u7b97\u7b26\u6216\u6210\u5458\u51fd\u6570\u6765\u83b7\u53d6\u5b58\u50a8\u7684JSON\u6570\u636e\u3002\u4f8b\u5982\uff1a<code>const char* sensor = doc[\"sensor\"];<\/code> \u83b7\u53d6\u952e\u4e3a \u201csensor\u201d \u5bf9\u5e94\u7684\u5b57\u7b26\u4e32\u503c\uff1b<code>int value = doc[\"value\"];<\/code> \u83b7\u53d6\u952e\u4e3a \u201cvalue\u201d \u5bf9\u5e94\u7684\u6574\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u904d\u5386\u6570\u636e \uff1a\u5982\u679c\u9700\u8981\u5904\u7406\u5d4c\u5957\u7684JSON\u6570\u636e\u6216\u6570\u7ec4\uff0c\u53ef\u4ee5\u4f7f\u7528\u8fed\u4ee3\u5668\u6216\u5176\u4ed6\u904d\u5386\u65b9\u6cd5\u3002\u4f8b\u5982\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u5305\u542b\u591a\u4e2a\u952e\u503c\u5bf9\u7684JSON\u5bf9\u8c61\uff0c\u53ef\u4ee5\u4f7f\u7528 <code>for(auto kv : doc)<\/code> \u5faa\u73af\u6765\u904d\u5386\u5176\u4e2d\u7684\u6bcf\u4e2a\u952e\u503c\u5bf9\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\uff085\uff09\u6e05\u7406\u4e0e\u91ca\u653e\u5b58\u50a8\u7a7a\u95f4<\/strong><\/p>\n\n\n\n<p>\u5728\u5b8c\u6210JSON\u6570\u636e\u7684\u5904\u7406\u540e\uff0c\u5bf9\u4e8e\u52a8\u6001\u5206\u914d\u7684 <code>DynamicJsonDocument<\/code> \u5bf9\u8c61\uff0c\u5982\u679c\u4e0d\u518d\u9700\u8981\u4f7f\u7528\uff0c\u53ef\u4ee5\u4f7f\u7528 <code>clear<\/code> \u65b9\u6cd5\u6e05\u7406\u5176\u5185\u90e8\u7684\u5b58\u50a8\u7a7a\u95f4\uff0c\u4ee5\u4fbf\u540e\u7eed\u91cd\u65b0\u4f7f\u7528\u8be5\u5bf9\u8c61\u6765\u5b58\u50a8\u65b0\u7684JSON\u6570\u636e\u3002\u5bf9\u4e8e\u9759\u6001\u5206\u914d\u7684 <code>StaticJsonDocument<\/code> \u5bf9\u8c61\uff0c\u5176\u5b58\u50a8\u7a7a\u95f4\u5728\u6808\u4e0a\uff0c\u51fd\u6570\u7ed3\u675f\u65f6\u4f1a\u81ea\u52a8\u91ca\u653e\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n#include &lt;ArduinoJson.h>\n\nvoid setup() {\n  Serial.begin(115200);\n\n  \/\/ JSON\u5e8f\u5217\u5316\u793a\u4f8b\n  JsonDocument doc_serialize; \/\/ \u521b\u5efa\u9759\u6001JSON\u6587\u6863\n  doc_serialize[\"temperature\"] = 25.5;   \/\/ \u6dfb\u52a0\u6e29\u5ea6\u6570\u636e\n  doc_serialize[\"humidity\"] = 50.0;      \/\/ \u6dfb\u52a0\u6e7f\u5ea6\u6570\u636e\n  doc_serialize[\"status\"] = \"normal\";    \/\/ \u6dfb\u52a0\u72b6\u6001\u6570\u636e\n\n  String json_str;\n  serializeJson(doc_serialize, json_str); \/\/ \u5e8f\u5217\u5316\u4e3aJSON\u5b57\u7b26\u4e32\n  Serial.println(\"\u5e8f\u5217\u5316\u540e\u7684JSON\u5b57\u7b26\u4e32:\");\n  Serial.println(json_str);\n\n  \/\/ JSON\u53cd\u5e8f\u5217\u5316\u793a\u4f8b\n  JsonDocument doc_deserialize; \/\/ \u521b\u5efa\u52a8\u6001JSON\u6587\u6863\n  DeserializationError error = deserializeJson(doc_deserialize, json_str); \/\/ \u53cd\u5e8f\u5217\u5316JSON\u5b57\u7b26\u4e32\n  if (error) {\n    Serial.print(\"JSON\u53cd\u5e8f\u5217\u5316\u9519\u8bef: \");\n    Serial.println(error.c_str());\n    return;\n  }\n\n  float temperature = doc_deserialize[\"temperature\"]; \/\/ \u83b7\u53d6\u6e29\u5ea6\u6570\u636e\n  float humidity = doc_deserialize[\"humidity\"];       \/\/ \u83b7\u53d6\u6e7f\u5ea6\u6570\u636e\n  String status = doc_deserialize[\"status\"];          \/\/ \u83b7\u53d6\u72b6\u6001\u6570\u636e\n\n  Serial.println(\"\\n\u53cd\u5e8f\u5217\u5316\u540e\u7684\u6570\u636e:\");\n  Serial.print(\"\u6e29\u5ea6: \");\n  Serial.println(temperature);\n  Serial.print(\"\u6e7f\u5ea6: \");\n  Serial.println(humidity);\n  Serial.print(\"\u72b6\u6001: \");\n  Serial.println(status);\n}\n\nvoid loop() {\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3 \u7cfb\u7edf\u914d\u7f6e\u7a0b\u5e8f\u5f00\u53d1<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 \u7a0b\u5e8f\u9700\u6c42\u5206\u6790<\/h3>\n\n\n\n<p>\u6682\u65f6\u65e0\u6cd5\u5728\u98de\u4e66\u6587\u6863\u5916\u5c55\u793a\u6b64\u5185\u5bb9<\/p>\n\n\n\n<p>\u8981\u5b9e\u73b0\u8fd9\u6837\u4e00\u4e2a\u7cfb\u7edf\u914d\u7f6e\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u8fd8\u8981\u8003\u8651\u7cfb\u7edf\u7684\u53c2\u6570\u5982\u4f55\u5b58\u50a8\u3002\u672c\u9879\u76ee\u63d0\u4f9b\u4e00\u4e2a\u601d\u8def\uff0c\u4ee5\u5efa\u7acb\u8d77\u4e00\u4e2a\u4e24\u4e2a\u5c42\u7ea7\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u53c2\u6570\u7c7bA<\/td><td>\u53c2\u65701\u952e<\/td><td>\u53c2\u65701\u503c<\/td><\/tr><tr><td><\/td><td>\u53c2\u65702\u952e<\/td><td>\u53c2\u65702\u503c<\/td><\/tr><tr><td><\/td><td>\u53c2\u65703\u952e<\/td><td>\u53c2\u65703\u503c<\/td><\/tr><tr><td>\u53c2\u6570\u7c7bB<\/td><td>\u53c2\u65701\u952e<\/td><td>\u53c2\u65701\u503c<\/td><\/tr><tr><td><\/td><td>\u53c2\u65702\u952e<\/td><td>\u53c2\u65702\u503c<\/td><\/tr><tr><td><\/td><td>\u53c2\u65703\u952e<\/td><td>\u53c2\u65703\u503c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4f8b\u5982wifi\u7684SSID\u548c\u5bc6\u7801\u5e94\u8be5\u5c5e\u4e8eNetWorkConfig\u7c7b\uff0c\u5b9a\u4e49\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Network\": {\n    \"SSID\": \"aust\",\n    \"PASS\": \"12345678\"\n  }\n}<\/pre>\n\n\n\n<p>\u53e6\u5916\u6211\u4eec\u8fd8\u9700\u8981\u601d\u8003\u4e00\u4e0b\u7cfb\u7edf\u914d\u7f6e\u6587\u4ef6\u91cc\u5e94\u8be5\u5305\u542b\u54ea\u4e9b\u53d8\u91cf\u7c7b\u578b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u6574\u578b<\/td><td>\u4fdd\u5b58\u4e00\u4e9b\u6574\u578b\u6570\u636e\uff0c\u5982\u7528\u6237\u6570\u91cf<\/td><\/tr><tr><td>\u6d6e\u70b9<\/td><td>\u4fdd\u5b58\u4e00\u4e9b\u6d6e\u70b9\u6570\u636e\uff0c\u5982\u8bbe\u7f6e\u7535\u673a\u76ee\u6807\u8f6c\u901f<\/td><\/tr><tr><td>\u5b57\u7b26\u4e32<\/td><td>\u4fdd\u5b58\u8bf8\u5982wifi\u540d\u79f0\uff0c\u5bc6\u7801\u4e4b\u7c7b\u7684\u5b57\u7b26\u4e32<\/td><\/tr><tr><td>\u5e03\u5c14<\/td><td>\u4e8c\u503c\u91cf\uff0c\u4f8b\u5982\u67d0\u4e9b\u7535\u78c1\u9600\u662f\u5426\u6253\u5f00<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 SysCfg\u6a21\u5757\u7f16\u7a0b\u601d\u8def<\/h3>\n\n\n\n<p>\u672c\u6a21\u5757\u4e3b\u8981\u5b9e\u73b0\u4e86\u7cfb\u7edf\u914d\u7f6e\u4fe1\u606f\u7684\u7ba1\u7406\u529f\u80fd\uff0c\u5305\u62ec\u914d\u7f6e\u4fe1\u606f\u7684\u52a0\u8f7d\u3001\u4fdd\u5b58\u3001\u6e05\u9664\u3001\u7ec4\u4e0e\u9879\u7684\u521b\u5efa\u53ca\u68c0\u67e5\u3001\u4e0d\u540c\u6570\u636e\u7c7b\u578b\u914d\u7f6e\u9879\u7684\u8bbe\u7f6e\u4e0e\u83b7\u53d6\u7b49\u64cd\u4f5c\u3002\u901a\u8fc7\u4f7f\u7528Arduino\u5e73\u53f0\u4e0b\u7684SPIFFS\u6587\u4ef6\u7cfb\u7edf\u548cArduinoJSON\u5e93\uff0c\u5b9e\u73b0\u4e86\u914d\u7f6e\u4fe1\u606f\u7684\u6301\u4e45\u5316\u5b58\u50a8\u548c\u7075\u6d3b\u7ba1\u7406\uff0c\u4e3a\u8bbe\u5907\u7684\u914d\u7f6e\u7ba1\u7406\u63d0\u4f9b\u4e86\u4fbf\u6377\u7684\u65b9\u5f0f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.2.1 \u6838\u5fc3\u529f\u80fd\u4e0e\u5b9e\u73b0\u903b\u8f91<\/h4>\n\n\n\n<p><strong>\uff081\uff09\u914d\u7f6e\u4fe1\u606f\u7684\u5b58\u50a8\u4e0e\u52a0\u8f7d<\/strong><\/p>\n\n\n\n<p>\u5b58\u50a8 \uff1a\u5728ESP32\u7684SPIFFS\u6587\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u914d\u7f6e\u4fe1\u606f\u4ee5JSON\u683c\u5f0f\u4fdd\u5b58\u5728\u6307\u5b9a\u8def\u5f84\u7684\u6587\u4ef6\uff08\/system.json\uff09\u4e2d\u3002\u5f53\u9700\u8981\u4fdd\u5b58\u914d\u7f6e\u4fe1\u606f\u65f6\uff0c\u901a\u8fc7\u8c03\u7528SysCfg_Save\u51fd\u6570\uff0c\u5148\u79fb\u9664\u65e7\u6587\u4ef6\uff08\u82e5\u5b58\u5728\uff09\uff0c\u7136\u540e\u6253\u5f00\u6587\u4ef6\u8fdb\u884c\u5199\u64cd\u4f5c\uff0c\u5c06SystemConfigRoot\u6587\u6863\u4e2d\u7684JSON\u6570\u636e\u5e8f\u5217\u5316\u4e3a\u683c\u5f0f\u5316\u7684\u5b57\u7b26\u4e32\u5199\u5165\u6587\u4ef6\u3002<\/p>\n\n\n\n<p>\u52a0\u8f7d \uff1a\u8c03\u7528SysCfg_Load\u51fd\u6570\u65f6\uff0c\u5148\u5c1d\u8bd5\u6253\u5f00\u914d\u7f6e\u6587\u4ef6\uff0c\u82e5\u6587\u4ef6\u4e0d\u5b58\u5728\uff0c\u5219\u521b\u5efa\u6587\u4ef6\u5e76\u5199\u5165\u9ed8\u8ba4\u7684\u7a7aJSON\u5bf9\u8c61\uff1b\u82e5\u6587\u4ef6\u5b58\u5728\uff0c\u5219\u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9\u5e76\u53cd\u5e8f\u5217\u5316\u5230SystemConfigRoot\u6587\u6863\u4e2d\uff0c\u4ee5\u4fbf\u7a0b\u5e8f\u540e\u7eed\u8bbf\u95ee\u548c\u64cd\u4f5c\u914d\u7f6e\u4fe1\u606f\u3002<\/p>\n\n\n\n<p><strong>\uff082\uff09\u914d\u7f6e\u7ec4\u4e0e\u9879\u7684\u7ba1\u7406<\/strong><\/p>\n\n\n\n<p>\u521b\u5efa\u7ec4 \uff1a\u901a\u8fc7SysCfg_CreateGroup\u51fd\u6570\uff0c\u5728SystemConfigRoot\u6587\u6863\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684JSON\u5bf9\u8c61\u4f5c\u4e3a\u914d\u7f6e\u7ec4\uff0c\u5e76\u8bbe\u7f6e\u4e00\u4e2a_check\u952e\u503c\u5bf9\u7528\u4e8e\u6807\u8bc6\u7ec4\u7684\u6709\u6548\u6027\u3002<\/p>\n\n\n\n<p>\u68c0\u67e5\u7ec4 \uff1aSysCfg_CheckGroup\u51fd\u6570\u7528\u4e8e\u68c0\u67e5\u6307\u5b9a\u7684\u914d\u7f6e\u7ec4\u662f\u5426\u5b58\u5728\u4e14\u6709\u6548\uff0c\u5373\u68c0\u67e5\u7ec4\u5bf9\u5e94\u7684JSON\u5bf9\u8c61\u662f\u5426\u5b58\u5728\u4e14_check\u503c\u4e3atrue\u3002<\/p>\n\n\n\n<p>\u521b\u5efa\u9879 \uff1aSysCfg_CreateItem\u51fd\u6570\u5728\u6307\u5b9a\u7684\u914d\u7f6e\u7ec4\u4e2d\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u914d\u7f6e\u9879\u3002\u6bcf\u4e2a\u914d\u7f6e\u9879\u4e5f\u662f\u4e00\u4e2aJSON\u5bf9\u8c61\uff0c\u5305\u542btype\uff08\u6570\u636e\u7c7b\u578b\uff09\u3001_check\uff08\u6709\u6548\u6027\u6807\u8bc6\uff09\u548cvalue\uff08\u503c\uff09\u4e09\u4e2a\u952e\u503c\u5bf9\u3002<\/p>\n\n\n\n<p>\u68c0\u67e5\u9879 \uff1aSysCfg_CheckItem\u51fd\u6570\u68c0\u67e5\u6307\u5b9a\u7684\u914d\u7f6e\u9879\u662f\u5426\u5b58\u5728\u4e14\u6570\u636e\u7c7b\u578b\u4e0e\u9884\u671f\u4e00\u81f4\uff0c\u786e\u4fdd\u914d\u7f6e\u9879\u7684\u6709\u6548\u6027\u548c\u6b63\u786e\u6027\u3002<\/p>\n\n\n\n<p><strong>\uff083\uff09<\/strong><strong>\u914d\u7f6e\u9879<\/strong><strong>\u7684\u8bbe\u7f6e\u4e0e\u83b7\u53d6<\/strong><\/p>\n\n\n\n<p>\u8bbe\u7f6e\u503c \uff1a\u63d0\u4f9b\u4e86\u9488\u5bf9\u4e0d\u540c\u6570\u636e\u7c7b\u578b\uff08\u6574\u6570\u3001\u5b57\u7b26\u3001\u5b57\u7b26\u4e32\u3001\u6d6e\u70b9\u6570\u3001\u5e03\u5c14\u503c\uff09\u7684SysCfg_SetItem\u7cfb\u5217\u51fd\u6570\uff0c\u7528\u4e8e\u5411\u6307\u5b9a\u7684\u914d\u7f6e\u9879\u8bbe\u7f6e\u503c\u3002\u5728\u8bbe\u7f6e\u4e4b\u524d\uff0c\u4f1a\u5148\u68c0\u67e5\u914d\u7f6e\u7ec4\u548c\u9879\u662f\u5426\u5b58\u5728\uff0c\u82e5\u4e0d\u5b58\u5728\u5219\u81ea\u52a8\u521b\u5efa\u3002\u8bbe\u7f6e\u503c\u65f6\uff0c\u76f4\u63a5\u4fee\u6539SystemConfigRoot\u6587\u6863\u4e2d\u5bf9\u5e94\u914d\u7f6e\u9879\u7684value\u503c\uff0c\u5e76\u8c03\u7528SysCfg_UpdateInter\u51fd\u6570\u6807\u8bb0\u914d\u7f6e\u4fe1\u606f\u5df2\u66f4\u65b0\uff08\u9700\u540e\u7eed\u624b\u52a8\u8c03\u7528SysCfg_Save\u4fdd\u5b58\uff09\u3002<\/p>\n\n\n\n<p>\u83b7\u53d6\u503c \uff1a\u5bf9\u5e94\u7684SysCfg_GetItem\u7cfb\u5217\u51fd\u6570\u7528\u4e8e\u4ece\u914d\u7f6e\u9879\u4e2d\u83b7\u53d6\u503c\u3002\u6839\u636e\u4e0d\u540c\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5c06SystemConfigRoot\u6587\u6863\u4e2d\u5bf9\u5e94\u914d\u7f6e\u9879\u7684value\u503c\u8f6c\u6362\u4e3a\u76f8\u5e94\u7684\u7c7b\u578b\u540e\u8fd4\u56de\u7ed9\u8c03\u7528\u8005\u3002\u5728\u83b7\u53d6\u503c\u4e4b\u524d\uff0c\u4e5f\u4f1a\u5148\u68c0\u67e5\u914d\u7f6e\u7ec4\u548c\u9879\u7684\u6709\u6548\u6027\u3002<\/p>\n\n\n\n<p><strong>\uff084\uff09\u914d\u7f6e\u4fe1\u606f\u7684\u6e05\u9664<\/strong><\/p>\n\n\n\n<p>SysCfg_ClearAll\u51fd\u6570\u7528\u4e8e\u6e05\u9664\u6240\u6709\u914d\u7f6e\u4fe1\u606f\u3002\u5b83\u5148\u6e05\u9664SystemConfigRoot\u6587\u6863\u4e2d\u7684\u5185\u5bb9\uff0c\u7136\u540e\u79fb\u9664SPIFFS\u4e0a\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5e76\u521b\u5efa\u4e00\u4e2a\u7a7a\u7684\u914d\u7f6e\u6587\u4ef6\u4ee5\u786e\u4fdd\u540e\u7eed\u64cd\u4f5c\u7684\u4e00\u81f4\u6027\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3.2.2 \u63a5\u53e3\u51fd\u6570\u529f\u80fd<\/h4>\n\n\n\n<p><strong>\uff081\uff09\u63a5\u53e3\u51fd\u6570\u5217\u8868<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u914d\u7f6e\u6587\u4ef6\u64cd\u4f5c\u63a5\u53e3<\/li>\n\n\n\n<li>void SysCfg_Load(void);<\/li>\n\n\n\n<li>int SysCfg_Save(void);<\/li>\n\n\n\n<li>int SysCfg_ClearAll();<\/li>\n\n\n\n<li>\u914d\u7f6e\u503c\u8bbe\u7f6e\u63a5\u53e3<\/li>\n\n\n\n<li>int SysCfg_SetItemInt(const char *group, const char *item, int data);<\/li>\n\n\n\n<li>int SysCfg_SetItemChar(const char *group, const char *item, void *data);<\/li>\n\n\n\n<li>int SysCfg_SetItemString(const char *group, const char *item, String data);<\/li>\n\n\n\n<li>int SysCfg_SetItemFloat(const char *group, const char *item, float data);<\/li>\n\n\n\n<li>int SysCfg_SetItemBool(const char *group, const char *item, bool data);<\/li>\n\n\n\n<li>\u914d\u7f6e\u9879\u521b\u5efa\u63a5\u53e3<\/li>\n\n\n\n<li>int SysCfg_CreateGroup(const char *group);<\/li>\n\n\n\n<li>int SysCfg_CreateItem(const char *group, const char *item, int type);<\/li>\n\n\n\n<li>int SysCfg_CheckGroup(const char *group);<\/li>\n\n\n\n<li>int SysCfg_CheckItem(const char *group, const char *item, int type);<\/li>\n\n\n\n<li>\u914d\u7f6e\u503c\u83b7\u53d6\u63a5\u53e3<\/li>\n\n\n\n<li>int SysCfg_GetItemInt(const char *group, const char *item, void *data);<\/li>\n\n\n\n<li>int SysCfg_GetItemChar(const char *group, const char *item, void *data, int len);<\/li>\n\n\n\n<li>String SysCfg_GetItemString(const char *group, const char *item, void *err);<\/li>\n\n\n\n<li>int SysCfg_GetItemFloat(const char *group, const char *item, void *data);<\/li>\n\n\n\n<li>int SysCfg_GetItemBool(const char *group, const char *item, void *data);<\/li>\n<\/ul>\n\n\n\n<p><strong>\uff082\uff09\u4ee5\u4e0b\u662f\u5bf9\u6240\u6709\u63a5\u53e3\u51fd\u6570\u7684\u529f\u80fd\u3001<\/strong><strong>\u5f62\u53c2<\/strong><strong>\u3001\u8fd4\u56de\u503c\u7684\u89e3\u91ca\u8bf4\u660e\uff1a<\/strong><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_Load<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u52a0\u8f7d\u7cfb\u7edf\u914d\u7f6e\u6587\u4ef6\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a\u65e0\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u65e0\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_Save<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u4fdd\u5b58\u7cfb\u7edf\u914d\u7f6e\u5230\u6587\u4ef6\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a\u65e0\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u4fdd\u5b58\u6210\u529f\u8fd4\u56de 1\uff0c\u5931\u8d25\u8fd4\u56de 0\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_ClearAll<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u6e05\u9664\u6240\u6709\u7cfb\u7edf\u914d\u7f6e\uff0c\u5e76\u521b\u5efa\u4e00\u4e2a\u7a7a\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a\u65e0\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u6e05\u9664\u548c\u521b\u5efa\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_CreateGroup<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u914d\u7f6e\u7ec4\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u8981\u521b\u5efa\u7684\u7ec4\u7684\u540d\u79f0\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u521b\u5efa\u6210\u529f\u8fd4\u56de 0\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_CheckGroup<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u68c0\u67e5\u6307\u5b9a\u7684\u914d\u7f6e\u7ec4\u662f\u5426\u5b58\u5728\u4e14\u6709\u6548\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u8981\u68c0\u67e5\u7684\u7ec4\u7684\u540d\u79f0\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u5b58\u5728\u4e14\u6709\u6548\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_CreateItem<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u5728\u6307\u5b9a\u7ec4\u4e2d\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u914d\u7f6e\u9879\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>int type<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u7c7b\u578b\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u521b\u5efa\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_CheckItem<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u68c0\u67e5\u6307\u5b9a\u7684\u914d\u7f6e\u9879\u662f\u5426\u5b58\u5728\u4e14\u7c7b\u578b\u5339\u914d\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>int type<\/code>\uff0c\u671f\u671b\u7684\u914d\u7f6e\u9879\u7c7b\u578b\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u5b58\u5728\u4e14\u7c7b\u578b\u5339\u914d\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_SetItemInt<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u8bbe\u7f6e\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u6574\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>int data<\/code>\uff0c\u8981\u8bbe\u7f6e\u7684\u6574\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u8bbe\u7f6e\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_SetItemChar<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u8bbe\u7f6e\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u5b57\u7b26\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>void *data<\/code>\uff0c\u8981\u8bbe\u7f6e\u7684\u5b57\u7b26\u503c\u7684\u6307\u9488\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u8bbe\u7f6e\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_SetItemString<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u8bbe\u7f6e\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u5b57\u7b26\u4e32\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>String data<\/code>\uff0c\u8981\u8bbe\u7f6e\u7684\u5b57\u7b26\u4e32\u503c\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u8bbe\u7f6e\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_SetItemFloat<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u8bbe\u7f6e\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u6d6e\u70b9\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>float data<\/code>\uff0c\u8981\u8bbe\u7f6e\u7684\u6d6e\u70b9\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u8bbe\u7f6e\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_SetItemBool<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u8bbe\u7f6e\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u5e03\u5c14\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>bool data<\/code>\uff0c\u8981\u8bbe\u7f6e\u7684\u5e03\u5c14\u503c\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u8bbe\u7f6e\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_GetItemInt<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u83b7\u53d6\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u6574\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>void *data<\/code>\uff0c\u7528\u4e8e\u5b58\u50a8\u83b7\u53d6\u5230\u7684\u6574\u6570\u503c\u7684\u6307\u9488\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u83b7\u53d6\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_GetItemChar<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u83b7\u53d6\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u5b57\u7b26\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>void *data<\/code>\uff0c\u7528\u4e8e\u5b58\u50a8\u83b7\u53d6\u5230\u7684\u5b57\u7b26\u503c\u7684\u6307\u9488\uff1b<code>int len<\/code>\uff0c\u6570\u636e\u7f13\u51b2\u533a\u7684\u957f\u5ea6\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u83b7\u53d6\u6210\u529f\u4e14\u7f13\u51b2\u533a\u957f\u5ea6\u8db3\u591f\u8fd4\u56de\u83b7\u53d6\u5230\u7684\u5b57\u7b26\u6570\uff0c\u7f13\u51b2\u533a\u957f\u5ea6\u4e0d\u8db3\u6216\u83b7\u53d6\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_GetItemString<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u83b7\u53d6\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u5b57\u7b26\u4e32\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>void *err<\/code>\uff0c\u7528\u4e8e\u5b58\u50a8\u9519\u8bef\u4ee3\u7801\u7684\u6307\u9488\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u83b7\u53d6\u6210\u529f\u8fd4\u56de\u5bf9\u5e94\u7684\u5b57\u7b26\u4e32\u503c\uff0c\u5931\u8d25\u8fd4\u56de\u7a7a\u5b57\u7b26\u4e32\uff0c\u5e76\u901a\u8fc7 err \u53c2\u6570\u8fd4\u56de\u9519\u8bef\u4ee3\u7801\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_GetItemFloat<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u83b7\u53d6\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u6d6e\u70b9\u6570\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>void *data<\/code>\uff0c\u7528\u4e8e\u5b58\u50a8\u83b7\u53d6\u5230\u7684\u6d6e\u70b9\u6570\u503c\u7684\u6307\u9488\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u83b7\u53d6\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">SysCfg_GetItemBool<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u529f\u80fd \uff1a\u83b7\u53d6\u6307\u5b9a\u914d\u7f6e\u9879\u7684\u5e03\u5c14\u503c\u3002<\/li>\n\n\n\n<li>\u5f62\u53c2 \uff1a<code>const char *group<\/code>\uff0c\u914d\u7f6e\u7ec4\u7684\u540d\u79f0\uff1b<code>const char *item<\/code>\uff0c\u914d\u7f6e\u9879\u7684\u540d\u79f0\uff1b<code>void *data<\/code>\uff0c\u7528\u4e8e\u5b58\u50a8\u83b7\u53d6\u5230\u7684\u5e03\u5c14\u503c\u7684\u6307\u9488\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u503c \uff1a\u83b7\u53d6\u6210\u529f\u8fd4\u56de true\uff0c\u5931\u8d25\u8fd4\u56de false\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#ifndef __SYSTEM_CONFIG_H__\n#define __SYSTEM_CONFIG_H__\n\n#include &lt;Arduino.h>\n#include &lt;SPIFFS.h>\n\ntypedef struct _System_status_list{\n    int wifi;\/\/ 0:AP\u6a21\u5f0f\uff0c1:STA\u6a21\u5f0f\uff0c\u672a\u8fde\u63a5\uff0c2:STA\u6a21\u5f0f\uff0c\u5df2\u8fde\u63a5\n}Syss_list;\n\n#define DeviceName  \"AIMC-SC\"\n\/\/ Const Params\n#define SYSCFG_SavePath \"\/system.json\"\n\n#define SYSCFG_GroupWlanSetting        \"WlanConfig\"\n#define SYSCFG_GroupWlanSetting_SSID   \"WlanSSID\"\n#define SYSCFG_GroupWlanSetting_PASS   \"WlanPass\"\n#define SYSCFG_GroupWlanSetting_HOST   \"WlanHost\"\n\n#define SYSCFG_GroupSystemSetting          \"System\"\n#define SYSCFG_GroupSystemSetting_Device   \"Name\"\n\n#define SYSCFG_GroupFirmware           \"Firmware\"\n#define SYSCFG_GroupFirmware_version1  \"version1\"\n#define SYSCFG_GroupFirmware_version2  \"version2\"\n#define SYSCFG_GroupFirmware_version3  \"version3\"\n\nextern uint8_t firmware_v1;\nextern uint8_t firmware_v2;\nextern uint8_t firmware_v3;\n\n#define SYSCFG_ConfigTypeNone      0\n#define SYSCFG_ConfigTypeInt       1\n#define SYSCFG_ConfigTypeString    2\n#define SYSCFG_ConfigTypeFloat     3\n#define SYSCFG_ConfigTypeBool      4\n\n\/\/ API List\n\nvoid SysCfg_Load(void);\nint SysCfg_Save(void);\nint SysCfg_ClearAll();\n\nint SysCfg_SetItemInt(const char *group, const char *item, int data);\nint SysCfg_SetItemChar(const char *group, const char *item, void *data);\nint SysCfg_SetItemString(const char *group, const char *item, String data);\nint SysCfg_SetItemFloat(const char *group, const char *item, float data);\nint SysCfg_SetItemBool(const char *group, const char *item, bool data);\n\nint SysCfg_CreateGroup(const char *group);\nint SysCfg_CreateItem(const char *group, const char *item, int type);\nint SysCfg_CheckGroup(const char *group);\nint SysCfg_CheckItem(const char *group, const char *item, int type);\n\nint SysCfg_GetItemInt(const char *group, const char *item, void *data);\nint SysCfg_GetItemChar(const char *group, const char *item, void *data, int len);\nString SysCfg_GetItemString(const char *group, const char *item, void *err);\nint SysCfg_GetItemFloat(const char *group, const char *item, void *data);\nint SysCfg_GetItemBool(const char *group, const char *item, void *data);\n\n#endif<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n#include &lt;SPIFFS.h>\n#include &lt;ArduinoJson.h>\n#include \"SysCfg_api.h\"\n\nstruct SpiRamAllocator : ArduinoJson::Allocator {\n    void* allocate(size_t size) override {\n        return heap_caps_malloc(size, MALLOC_CAP_SPIRAM);\n    }\n\n    void deallocate(void* pointer) override {\n        heap_caps_free(pointer);\n    }\n\n    void* reallocate(void* ptr, size_t new_size) override {\n        return heap_caps_realloc(ptr, new_size, MALLOC_CAP_SPIRAM);\n    }\n};\nSpiRamAllocator allocator;\nJsonDocument SystemConfigRoot(&amp;allocator);\nvoid SysCfg_Load(void)\n{\n    \/\/ \u52a0\u8f7d\u8bbe\u5907\u4fe1\u606f\n    File file = SPIFFS.open(SYSCFG_SavePath, FILE_READ);\n    if (!file)\n    {    \n        file.close();\n        \/\/ logt_warn(LogTopic_FS,\"Load System Settings Failed.\");\n        \/\/ System_Printf(\"Load System Settings Failed.\\r\\n\");\n        \/\/\u521b\u5efa\u7cfb\u7edf\u914d\u7f6e\u6587\u4ef6\n        file = SPIFFS.open(SYSCFG_SavePath, FILE_WRITE);\n        if (!file)\n        {\n        \/\/   logt_debug(LogTopic_FS,\"SPIFFS\u521b\u5efa\u6587\u4ef6\u5931\u8d25\");\n        }\n        String json_str;\n        serializeJson(SystemConfigRoot, json_str); \/\/ \u5e8f\u5217\u5316\u4e3aJSON\u5b57\u7b26\u4e32\n        Serial.println(\"\u5e8f\u5217\u5316\u540e\u7684JSON\u5b57\u7b26\u4e32:\");\n        Serial.println(json_str);\n        serializeJson(SystemConfigRoot,file);\n        file.close();\n    }\n    else\n    {\n        String data2 = file.readString();\n        file.close();\n        deserializeJson(SystemConfigRoot, data2);\n        \/\/ serializeJsonPretty(SystemConfigRoot,Serial);\n        \/\/ logt_info(LogTopic_FS,\"\u7cfb\u7edf\u914d\u7f6e\u6587\u4ef6\u5df2\u52a0\u8f7d\");\n        \/\/ System_Printf(\"\\r\\n\");\n    }\n}\n\nint SysCfg_UpdateInter(void)\n{  \n    \/\/\u53d6\u6d88\u6bcf\u6b21\u66f4\u65b0\u90fd\u4fdd\u5b58\u7684\u64cd\u4f5c\uff0c\u9700\u72ec\u7acb\u6267\u884c\u4fdd\u5b58\n    \/\/ SPIFFS.remove(SYSCFG_SavePath);\n    \/\/ File file = SPIFFS.open(SYSCFG_SavePath, FILE_WRITE);\n    \/\/ if (!file)\n    \/\/ {\n    \/\/   return 0;\n    \/\/ }\n    \/\/ serializeJsonPretty(SystemConfigRoot,file);\n    \/\/ file.close();\n    return 1;\n}\n\nint SysCfg_Save(void)\n{  \n    SPIFFS.remove(SYSCFG_SavePath);\n    File file = SPIFFS.open(SYSCFG_SavePath, FILE_WRITE);\n    if (!file)\n    {\n        return 0;\n    }\n    String json_str;\n    serializeJson(SystemConfigRoot, json_str); \/\/ \u5e8f\u5217\u5316\u4e3aJSON\u5b57\u7b26\u4e32\n    Serial.println(\"\u5e8f\u5217\u5316\u540e\u7684JSON\u5b57\u7b26\u4e32:\");\n    Serial.println(json_str);\n    serializeJsonPretty(SystemConfigRoot,file);\n    file.close();\n    return 1;\n}\n\nint SysCfg_ClearAll()\n{\n    SystemConfigRoot.clear();\n    SPIFFS.remove(SYSCFG_SavePath);\n    File file = SPIFFS.open(SYSCFG_SavePath, FILE_WRITE);\n    if (!file)\n    {\n        return 0;\n    }\n    file.print(\"{}\");\n    file.close();\n    return true;\n}\n\nint SysCfg_CreateGroup(const char *group)\n{\n  SystemConfigRoot[group][\"_check\"] = true;\n  return 0;\n}\n\nint SysCfg_CheckGroup(const char *group)\n{\n    \/\/ serializeJsonPretty(SystemConfigRoot,Serial);\n    if (SystemConfigRoot[group].is&lt;JsonObject>())\n    {\n        if(SystemConfigRoot[group][\"_check\"] == true)\n        return true;\n        else\n        return false;\n    }\n    else\n        return false;    \n}\n\nint SysCfg_CreateItem(const char *group, const char *item, int type)\n{\n    if (!SysCfg_CheckGroup(group))\n    {\n        \/\/\u7ec4\u4e0d\u5b58\u5728\uff0c\u521b\u5efa\u7ec4\n        SysCfg_CreateGroup(group);\n    }\n    SystemConfigRoot[group][item][\"type\"] = type;\n    SystemConfigRoot[group][item][\"_check\"] = true;\n    return true;  \n}\n\nint SysCfg_CheckItem(const char *group, const char *item, int type)\n{\n    if (SysCfg_CheckGroup(group))\n    {\n        if (SystemConfigRoot[group][item].is&lt;JsonObject>())\n        {\n        if(SystemConfigRoot[group][item][\"_check\"])\n        {\n            if (type!=SYSCFG_ConfigTypeNone)\n            {\n            if (SystemConfigRoot[group][item][\"type\"] == type)\n                return true;\n            else\n                return false;        \n            }      \n            return true;\n        }\n        else\n            return false;\n        }\n        else\n        return false;    \n    }\n    else\n        return false;\n}\nint SysCfg_SetItemInt(const char *group, const char *item, int data)\n{\n    if (!SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeNone))\n    {\n        \/\/\u7ec4\u6216\u5143\u7d20\u4e0d\u5b58\u5728\uff0c\u521b\u5efa\u5143\u7d20\n        SysCfg_CreateItem(group,item,SYSCFG_ConfigTypeInt);\n    }\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeInt))\n    {\n        SystemConfigRoot[group][item][\"value\"] = (int)data;\n        SysCfg_UpdateInter();\n        return true; \n    }\n    else\n        return false;\n}\n\nint SysCfg_SetItemChar(const char *group, const char *item, void *data)\n{\n    if (!SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeNone))\n    {\n        \/\/\u7ec4\u6216\u5143\u7d20\u4e0d\u5b58\u5728\uff0c\u521b\u5efa\u5143\u7d20\n        SysCfg_CreateItem(group,item,SYSCFG_ConfigTypeString);\n    }\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeString))\n    {\n        SystemConfigRoot[group][item][\"value\"] = (const char *)data;\n        SysCfg_UpdateInter();\n        return true; \n    }\n    else\n        return false;\n}\n\nint SysCfg_SetItemString(const char *group, const char *item, String data)\n{\n    if (!SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeNone))\n    {\n        \/\/\u7ec4\u6216\u5143\u7d20\u4e0d\u5b58\u5728\uff0c\u521b\u5efa\u5143\u7d20\n        SysCfg_CreateItem(group,item,SYSCFG_ConfigTypeString);\n    }\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeString))\n    {\n        SystemConfigRoot[group][item][\"value\"] = data;\n        SysCfg_UpdateInter();\n        return true; \n    }\n    else\n        return false;\n}\n\nint SysCfg_SetItemFloat(const char *group, const char *item, float data)\n{\n    if (!SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeNone))\n    {\n        \/\/\u7ec4\u6216\u5143\u7d20\u4e0d\u5b58\u5728\uff0c\u521b\u5efa\u5143\u7d20\n        SysCfg_CreateItem(group,item,SYSCFG_ConfigTypeFloat);\n    }\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeFloat))\n    {\n        SystemConfigRoot[group][item][\"value\"] = data;\n        SysCfg_UpdateInter();\n        return true; \n    }\n    else\n        return false;\n}\nint SysCfg_SetItemBool(const char *group, const char *item, bool data)\n{\n    if (!SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeNone))\n    {\n        \/\/\u7ec4\u6216\u5143\u7d20\u4e0d\u5b58\u5728\uff0c\u521b\u5efa\u5143\u7d20\n        SysCfg_CreateItem(group,item,SYSCFG_ConfigTypeBool);\n    }\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeBool))\n    {\n        SystemConfigRoot[group][item][\"value\"] = data;\n        \n        SysCfg_UpdateInter();\n        return true; \n    }\n    else\n        return false;\n}\nint SysCfg_GetItemInt(const char *group, const char *item, void *data)\n{\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeInt))\n    {\n        *(int *)data = SystemConfigRoot[group][item][\"value\"];\n        return true;\n    }\n    else\n        return false;\n}\nint SysCfg_GetItemChar(const char *group, const char *item, void *data, int len)\n{\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeString))\n    {\n        if(len > strlen(SystemConfigRoot[group][item][\"value\"]))\n        {\n        strcpy((char *)data,SystemConfigRoot[group][item][\"value\"]);\n        return strlen(SystemConfigRoot[group][item][\"value\"]);\n        }\n        else\n        return false;\n    }\n    else\n        return false;\n}\nString SysCfg_GetItemString(const char *group, const char *item, void *err)\n{\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeString))\n    {\n        String data = SystemConfigRoot[group][item][\"value\"];\n        *(int *)err = 0;\n        return data;\n    }\n    else\n        *(int *)err = -1;\n        return String(\"\");\n}\nint SysCfg_GetItemFloat(const char *group, const char *item, void *data)\n{\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeFloat))\n    {\n        *(float *)data = SystemConfigRoot[group][item][\"value\"];\n        return true;\n    }\n    else\n        return false;\n}\nint SysCfg_GetItemBool(const char *group, const char *item, void *data)\n{\n    if (SysCfg_CheckItem(group,item,SYSCFG_ConfigTypeBool))\n    {\n        *(bool *)data = SystemConfigRoot[group][item][\"value\"];\n        return true;\n    }\n    else\n        return false;\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n#include &lt;ArduinoJson.h>\n#include &lt;SPIFFS.h>\n#include &lt;SysCfg_api.h>\n\nvoid setup() {\n    u32_t err;\n    Serial.begin(115200);\n    sys_delay_ms(4000);\n    if (!SPIFFS.begin())\n    {\n        \/\/ \u521d\u59cb\u5316\u5931\u8d25\u65f6\u5904\u7406\n      Serial.println(\"SPIFFS-An error occurred while mounting SPIFFS\");\n      \/\/ \u683c\u5f0f\u5316SPIFFS\u5206\u533a\n      if (SPIFFS.format())\n      {\n        \/\/ \u683c\u5f0f\u5316\u6210\u529f\n        Serial.println(\"SPIFFS partition formatted successfully\");\n        \/\/ \u91cd\u542f\n        ESP.restart();\n      }\n      else\n      {\n        Serial.println(\"SPIFFS partition format failed\");\n      }\n      return;\n    }\n    SysCfg_Load();\n    SysCfg_SetItemString(SYSCFG_GroupFirmware, \"TEST\", \"TEST STRING\");\n    SysCfg_Save();\n    Serial.printf(\"Get Set Value: %s\\r\\n\",SysCfg_GetItemString(SYSCFG_GroupFirmware, \"TEST\", &amp;err));\n    \n}\n\nvoid loop() {\n\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u2460 \u6587\u4ef6\u7cfb\u7edf\u4e0eSPIFFS \u2461 Json\u4e0eArduinoJSON \u2462 \u7cfb\u7edf\u53c2\u6570\u6301\u4e45\u5316\u7cfb\u7edf\u5f00\u53d1 1 \u6587\u4ef6\u7cfb\u7edf \u4ece [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":868,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,56],"tags":[46,58,83],"class_list":["post-865","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aimc_course","category-56","tag-esp32","tag-58","tag-83"],"_links":{"self":[{"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/posts\/865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/comments?post=865"}],"version-history":[{"count":1,"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/posts\/865\/revisions"}],"predecessor-version":[{"id":872,"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/posts\/865\/revisions\/872"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/media\/868"}],"wp:attachment":[{"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/media?parent=865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/categories?post=865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aimc.skyate.com\/index.php\/wp-json\/wp\/v2\/tags?post=865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}