{"id":6560,"date":"2022-07-03T15:17:22","date_gmt":"2022-07-03T07:17:22","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=6560"},"modified":"2022-07-09T12:46:05","modified_gmt":"2022-07-09T04:46:05","slug":"%e5%b0%8f%e7%8c%aa%e5%ad%a6arduino-wifi%e5%9b%be%e4%bc%a0%e9%81%a5%e6%8e%a7","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=6560","title":{"rendered":"\u5c0f\u732a\u5b66arduino\u2014Wifi\u56fe\u4f20+\u9065\u63a7\u5766\u514b"},"content":{"rendered":"<p>\u6700\u8fd1\u8c03\u78144G\u56fe\u4f20\u63a7\u5236\u6a21\u7ec4\uff0c\u53d1\u73b0\u4e00\u4e2a\u4e0d\u9519\u7684wifi\u56fe\u4f20\u6a21\u5757\uff0c\u7528\u8d77\u6765\u5f88\u7b80\u5355\uff0c\u4f46\u662f\u53ea\u80fd\u57fa\u4e8e\u6a21\u7ec4\u81ea\u8eab\u7684wifi\u4fe1\u53f7\u4f20\u8f93\u800c\u4e0d\u80fd\u8d704G\u3002\u867d\u7136\u6ca1\u80fd\u6ee1\u8db34G\u7684\u9700\u6c42\uff0c\u4f46\u662f\u4f9d\u7136\u53ef\u4ee5\u5728\u5f88\u591a\u573a\u666f\u53d1\u6325\u4f5c\u7528\uff0c\u6bd4\u5982\u8fd1\u573a\u9065\u63a7\u6c7d\u8247\u3001\u6f5c\u8247\u3001\u65e0\u4eba\u673a\u3001\u5766\u514b\u7684\u89c6\u9891\u76d1\u63a7\uff0cWifi 2.4G\u7684\u4fe1\u53f7\u4e5f\u8fd8\u662f\u53ef\u4ee5\u4f20\u5f88\u8fdc\u8ddd\u79bb\u7684\uff0c\u65e2\u7136\u8fd8\u6709\u8fd9\u4e48\u591a\u5e94\u7528\u573a\u666f\uff0c\u8fd9\u91cc\u5c31\u8bb0\u5f55\u4e0b\u6a21\u7ec4\u7684\u8bbe\u8ba1\u548c\u4f7f\u7528\u65b9\u6cd5\u5427\uff0c\u65b9\u4fbf\u505a\u5c0f\u73a9\u610f\u65f6\u7528\u3002<\/p>\n<h1>\u4e00\u3001\u6982\u8ff0<\/h1>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-6563\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera.png\" alt=\"\" width=\"423\" height=\"376\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera.png 423w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-300x267.png 300w\" sizes=\"(max-width: 423px) 100vw, 423px\" \/><\/a><\/p>\n<h3>1.\u6a21\u7ec4\u8bf4\u660e<\/h3>\n<h4>1.1.\u56fe\u4f20<\/h4>\n<ul>\n<li>\u6a21\u7ec4\u5185\u7f6e\u5355\u7247\u673a+wifi\u6a21\u5757\uff0c\u4f9b\u7535\u540e\u81ea\u52a8\u542f\u52a8wifi\u70ed\u70b9\uff0c\u4f7f\u7528WLUFO APP\u8fde\u63a5\u70ed\u70b9\u540e\uff0c\u81ea\u52a8\u5b9e\u73b0\u56fe\u4f20\u663e\u793a\u80fd\u529b<\/li>\n<li>\u56fe\u4f20\u548c\u63a7\u5236\u90fd\u5728SWLTOY-WIFI\u89c6\u9891\u6a21\u7ec4+APP\u91cc\uff0carduino\u4ec5\u7528\u4e8e\u901a\u8fc7\u6a21\u7ec4\u63a5\u6536\u6765\u81eaAPP\u7684\u63a7\u5236\u4fe1\u53f7\uff1b\u56fe\u4f20\u80fd\u529b\u4e0earduino\u65e0\u5173\uff0c\u53ef\u5355\u72ecv3.3\u4f9b\u7535\u4f7f\u7528<\/li>\n<\/ul>\n<h4>1.2.\u63a7\u5236<\/h4>\n<ul>\n<li>\u6a21\u7ec4\u4fe1\u53f7\u7ebf\u8fde\u63a5\u5230arduino RX\u7aef\u53e3\u540e\uff0carduino\u53ef\u901a\u8fc719200\u4e32\u53e3\u4e0e\u6a21\u7ec4\u901a\u4fe1\uff0c\u83b7\u53d6\u6765\u81eaWLUFO APP\u7684\u64cd\u4f5c\u63a7\u5236\u4fe1\u53f7\uff0c\u4e4b\u540e\u5728arduino\u7aef\u5b9e\u73b0\u540e\u7eed\u8235\u673a\u6216\u7535\u673a\u63a7\u5236\u5373\u53ef<\/li>\n<li>\u4e32\u53e3\u53d1\u9001\u6570\u636e\u683c\u5f0f(\u4e32\u53e3\u6ce2\u7279\u7387 19200,1 \u4e2a\u542f\u59cb\u4f4d,1 \u4e2a\u505c\u6b62\u4f4d,\u5176\u5b83\u65e0)\uff0c\u53d1\u9001\u95f4\u9694 40MS,\u4e00\u6b21\u53d1\u9001 8 \u4e2a BYTE\uff0c\u6570\u636e\u683c\u5f0f(\u5b9a\u9ad8\u72b6\u6001):66 80 80 80 80 40 40 99\uff1a\n<ul>\n<li>BYTE[0]\uff1a\u6570\u636e\u5934\uff0c\u56fa\u5b9a\u4e3a 0X66\u3002\u901f\u5ea6\u4e3a 30%\u65f6\uff0c(\u526f\u7ffc\uff0c\u5347\u964d\u8235)0x59-0x80-0xA8 \u7ebf\u6027\u53d8\u5316\u3002\u901f\u5ea6\u4e3a 60%\u65f6\uff0c(\u526f\u7ffc\uff0c\u5347\u964d\u8235)0x45-0x80-0xBC \u7ebf\u6027\u53d8\u5316\u3002\u901f\u5ea6\u4e3a 100%\u65f6\uff0c(\u526f\u7ffc\uff0c\u5347\u964d\u8235)0x00-0x80-0xFF \u7ebf\u6027\u53d8\u5316\u3002<\/li>\n<li>BYTE[1]\uff1aAIL\u2014\u2014\u526f\u7ffc(4-5): \u4e2d\u95f4\u503c 0x80\uff0c\u5de6\u8fb9\u6700\u5927\u4e3a 0x00\uff0c\u53f3\u8fb9\u6700\u5927\u4e3a 0xff\u3002<\/li>\n<li>BYTE[2]\uff1aELE\u2014\u2014\u5347\u964d\u8235(6-7):\u4e2d\u95f4\u503c 0x80\uff0c\u540e\u6700\u5927\u4e3a 0x00\uff0c\u524d\u6700\u5927\u4e3a 0xff\u3002<\/li>\n<li>BYTE[3]\uff1aTHR\u2014\u2014\u6cb9\u95e8(1):0x00 \u4e3a\u6700\u5c0f\uff0c0xff \u4e3a\u6700\u5927\u3002\u6cb9\u95e8\u5728\u6ca1\u6709\u5f00\u542f\u5b9a\u9ad8\u6a21\u5f0f\u7684\u65f6\u5019\uff0c\u5c31\u662f 0\uff0c\u5f00\u542f\u5b9a\u8c03\u6a21\u5f0f\u540e\u662f\u5c45\u4e2d(0x80)\u3002(\u5fae\u8c03\u8bf4\u660e:\u524d\u540e\/\u4fa7\u98de:\u00b124 \u6b65 \u6b65\u8fdb 1 128+\u504f\u79fb\u91cf\uff0c\u6bcf\u6b21\u91cd\u542f\u540e\u56de\u5f52\u9ed8\u8ba4\u503c 128)\u3002<\/li>\n<li>BYTE[4]\uff1aRUDD\u2014\u2014\u65b9\u5411\u8235(2-3):\u4e2d\u95f4\u503c 0x80\uff0c\u5de6\u8f6c\u6700\u5927\u4e3a 0x00\uff0c\u53f3\u8f6c\u6700\u5927\u4e3a 0xff\u3002<\/li>\n<li>BYTE[5]\uff1a\u6807\u5fd7\u4f4d\u3002bit0=\u4e00\u952e\u8d77\u98de \u5148\u7f6e 1\uff0c1 \u79d2\u540e\u7f6e 0 \u9ed8\u8ba4\u4e3a 0\uff0c0x41\u3002bit1=\u4e00\u952e\u4e0b\u964d \u5148\u7f6e 1\uff0c1 \u79d2\u540e\u7f6e 0 \u9ed8\u8ba4\u4e3a 0\uff0c0x42\u3002<\/li>\n<li>BYTE[6]\uff1a\u6821\u9a8c\u4f4d\u3002(BYTE[1]^BYTE[2]^BYTE[3]^BYTE[4]^BYTE[5])&amp;0xff\u3002<\/li>\n<li>BYTE[7]\uff1a\u6570\u636e\u5c3e\uff0c\u56fa\u5b9a\u4e3a 0x99\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>2.\u4f18\u70b9<\/h3>\n<ul>\n<li>\u6444\u50cf\u5934\u56fe\u4f20\u6a21\u7ec4\u72ec\u7acb\u5c01\u88c5\uff0c\u4e0earduino\u5206\u79bb\uff0c\u53ea\u5173\u5fc3\u63a7\u5236\u4fe1\u53f7\u90e8\u5206\u5b9e\u73b0\u5373\u53ef<\/li>\n<\/ul>\n<h3>3.\u4e0d\u8db3<\/h3>\n<ul>\n<li>\u6a21\u7ec4\u914d\u5957\u7684APP\u6ca1\u6709\u6e90\u7801\uff0c\u5982\u679c\u8981\u4e8c\u6b21\u5f00\u53d1\uff0c\u9700\u8981\u53cd\u7f16\u8bd1APK\u7814\u7a76\u540e\u518d\u81ea\u5df1\u5b9e\u73b0<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h1>\u4e8c\u3001\u8fde\u7ebf<\/h1>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-6566\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi.png\" alt=\"\" width=\"620\" height=\"455\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi.png 620w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-300x220.png 300w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>\u786c\u4ef6\u8fde\u7ebf\uff1a<\/p>\n<p style=\"padding-left: 40px;\">Arduino&#8212;&#8212;-\u6a21\u7ec4<br \/>\n<span style=\"color: #ff0000;\">3.3V<\/span> &#8212;&#8212;&#8211; VCC<br \/>\nGND &#8212;&#8212;&#8211; GND<br \/>\n<span style=\"color: #ff0000;\">RX<\/span> &#8212;&#8212;&#8211; TX<\/p>\n<p>\u5b9e\u9645\u8fde\u7ebf\u56fe\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino.jpg\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-6576\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino-1024x768.jpg\" alt=\"\" width=\"625\" height=\"469\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino-1024x768.jpg 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino-300x225.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino-768x576.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino-1536x1152.jpg 1536w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino-624x468.jpg 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-link-arduino.jpg 2016w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u6ce8\uff1a\u5766\u514b\u5e95\u76d8\u91c7\u7528\u7684l298n+2\u4e2a\u5c0f\u9a6c\u8fbe\uff0c\u5177\u4f53\u63a5\u7ebf\u65b9\u6cd5\u4e0d\u5728\u8d58\u8ff0\uff0c\u5927\u5bb6\u7ffb\u4e00\u7ffb\u6211\u4e4b\u524d\u53d1\u7684l298n\u7535\u9a71\u7248\u7684\u6559\u7a0b\u5373\u53ef\u3002<\/p>\n<p>&nbsp;<\/p>\n<h1>\u4e09\u3001\u8c03\u8bd5<\/h1>\n<h3>1.\u56fe\u4f20\u6d4b\u8bd5<\/h3>\n<h4>1.1.\u5b89\u88c5APP<\/h4>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-app.png\"><img loading=\"lazy\" class=\"alignnone wp-image-6575 size-medium\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-app-300x173.png\" alt=\"\" width=\"300\" height=\"173\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-app-300x173.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-app-768x443.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-app-624x360.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/camera-wifi-app.png 968w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h4>1.3.\u6d4b\u8bd5\u56fe\u4f20<\/h4>\n<div class=\"page\" title=\"Page 2\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p>\u6a21\u5757\u81ea\u5e26 WiFi \u4fe1\u53f7\uff0c\u5c06\u6a21\u5757\u901a\u7535\u5e76\u8fde\u63a5 WiFi \u4fe1\u53f7\u5373\u53ef\u5b9e\u65f6\u4f20\u8f93\u89c6\u9891\u3002\u6a21\u5757\u4e0a\u7535\u540e\u84dd\u706f\u5e38\u4eae\uff0c \u624b\u673a\u8fde\u63a5WIFI\u540d\u79f0 WIFIUFO-XXXX\uff0c\u65e0 WiFi \u4fe1\u53f7\u65f6\u91cd\u65b0<span style=\"font-size: 1rem;\">\u5c06\u6a21\u5757\u4e0a\u7535\u5373\u53ef\u3002<\/span><\/p>\n<div class=\"page\" title=\"Page 3\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p>WIFI\u8fde\u63a5\u6210\u529f\u540e\u6253\u5f00WL-UFO APP\uff0c\u70b9\u51fb\u53f3\u4e0b\u89d2PLAY\u6309\u94ae\uff0c\u6253\u5f00\u754c\u9762\u540e\u5373\u53ef\u67e5\u770b\u5b9e\u65f6\u4f20\u8f93\u56de\u6765\u7684\u56fe\u50cf\u3002\u6a21\u5757\u901a\u7535\u60c5\u51b5\u4e0b\u4e3a\u84dd\u706f\u5e38\u4eae\u6a21\u5f0f(\u53ef\u4ece\u4fa7\u9762\u67e5\u770b)\uff0c\u5f53\u6253\u5f00\u8f6f\u4ef6\u65f6\u706f\u95ea\u70c1\uff0c\u6b64\u65f6\u5373\u53ef\u63a7\u5236\uff0c\u5982\u9700\u8fde\u63a5\u4fe1\u53f7\u8bfb\u53d6\u5904\u7406\u53ef\u6253\u5f00OFF\u6309\u952e\uff0c\u51fa\u73b0\u63a7\u5236\u72b6\u6001\u754c\u9762\u5373\u53ef\u63a7\u5236\u8f93\u51fa\u4fe1\u53f7\uff0c\u5355\u7247\u673a\u83b7\u53d6\u4fe1\u53f7\u540e\u5904\u7406\u5373\u53ef\u63a7\u5236\u9700\u8981\u7684\u6a21\u5757\uff0c\u5982\u7535\u673a\uff0c\u8235\u673a\uff0c\u706f\u3002<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test.jpg\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-6591\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test-1024x575.jpg\" alt=\"\" width=\"625\" height=\"351\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test-1024x575.jpg 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test-300x169.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test-768x432.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test-1536x863.jpg 1536w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test-624x351.jpg 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-test.jpg 1600w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<div class=\"page\" title=\"Page 4\">\n<div class=\"layoutArea\">\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<h3>2.\u63a7\u5236\u4fe1\u53f7\u63a5\u6536\u6d4b\u8bd5<\/h3>\n<p>\u8c03\u8bd5\u7a0b\u5e8f:<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\">\/*\r\n  Wifi \u89c6\u9891\u4f20\u8f93 \u63a7\u5236\u8235\u673a\u8f6c\u5411\u5c0f\u8f66\r\n\r\n  \u786c\u4ef6\u8fde\u7ebf:\r\n    Arduino Pin     Wifi\u89c6\u9891\u4f20\u8f93\u6a21\u5757\r\n    3.3v --------   VCC\r\n    GND  --------   GND\r\n    RX   --------   TX\r\n\r\n  \u539f\u7406\u8bf4\u660e\uff1a\u56fe\u4f20\u548c\u63a7\u5236\u90fd\u5728SWLTOY-WIFI\u89c6\u9891\u6a21\u7ec4+APP\u91cc\uff0carduino\u4ec5\u7528\u4e8e\u901a\u8fc7\u6a21\u7ec4\u63a5\u6536\u6765\u81eaAPP\u7684\u63a7\u5236\u4fe1\u53f7\r\n    -Wifi\u6444\u50cf\u5934\u6a21\u7ec4\u5185\u7f6e\u6709\u5355\u7247\u673a\uff0c\u4f9b\u7535\u7ebf\u4f9b\u7535\u540e\u5373\u542f\u52a8wifi\uff0c\u5e76\u63d0\u4f9b\u4e0eWLUFO APP\u56fe\u4f20\u548c\u63a7\u5236\u4fe1\u53f7\u4ea4\u4e92\u80fd\u529b\u3002\u548c\u90e8\u5206\u80fd\u529b\u4e0earduino\u65e0\u5173\uff0c\u79bb\u5f00arduino\u5355\u72ecv3.3\u4f9b\u7535\u5373\u53ef\u4f7f\u7528\r\n    -\u4fe1\u53f7\u7ebf\u8fde\u63a5\u5230arduino RX\u7aef\u53e3\u540e\uff0carduino\u53ef\u901a\u8fc719200\u4e32\u53e3\u4e0eWifi\u6444\u50cf\u5934\u6a21\u7ec4\u901a\u4fe1\uff0c\u83b7\u53d6WLUFO APP\u91cc\u64cd\u4f5c\u7684\u63a7\u5236\u4fe1\u53f7\uff0c\u5e76\u8fdb\u884c\u540e\u7eed\u8235\u673a\u6216\u7535\u673a\u64cd\u4f5c\u5373\u53ef\r\n*\/\r\n\r\n#include &lt;Servo.h&gt;\r\n#define DATA_LENGHT 5\r\n\r\nstatic uint8_t AIL = 0;\r\nstatic uint8_t ELE = 1;\r\nstatic uint8_t THR = 2;\r\nstatic uint8_t RUDD = 3;\r\nstatic uint8_t FLAG = 4;\r\nstatic uint8_t Data[5] = {0, 0, 0, 0, 0};\r\nstatic uint32_t checksum;\r\n\r\n\r\nvoid setup() {   \/\/\u7a0b\u5e8f\u521d\u59cb\u5316\uff0c\u53ea\u8fd0\u884c\u4e00\u6b21\r\n  Serial.begin(19200);\r\n  Serial.println(\"Begin...\");\r\n  \r\n  delay(100);\r\n}\r\n\r\nvoid loop() {      \/\/\u4e3b\u7a0b\u5e8f\u8fd0\u884c\r\n  serialCom();\r\n}\r\n\r\nvoid serialCom() {  \/\/\u6570\u636e\u901a\u8baf\r\n  uint8_t c, checks;\r\n  static uint8_t offset;\r\n  static enum _serial_state {\r\n    IDLE,\r\n    HEADER_66,\r\n    HEADER_99,\r\n  }\r\n  c_state;\r\n  while (Serial.available()) {\r\n    c = Serial.read();                                        \/\/ \u8bfb\u4e32\u53e3\u7f13\u51b2\u533a\r\n    if (c_state == IDLE) {                                    \/\/ \u4e32\u53e3\u72b6\u6001\u7a7a\u95f2,\u7b49\u5f85HEADER_66\u72b6\u6001\u7684\u5230\u6765\r\n      c_state = (c == 0x66) ? HEADER_66 : IDLE;               \/\/ \u5224\u65ad\u662f\u5426\u8fdb\u5165HEADER_66\r\n      offset = 0;\r\n      checksum = 0;\r\n      for (int i = 0 ; i &lt; 5; i++)\r\n        Data[i] = 0;\r\n    } else if (c_state == HEADER_66 &amp;&amp; offset &lt; DATA_LENGHT) {   \/\/ \u8fdb\u5165 HEADER_66 \u72b6\u6001\uff0c\u8bfb\u53d6\u6570\u636e\r\n      Data[offset] = c;\r\n      checksum ^= c;                                             \/\/ \u6821\u9a8c\u548c\r\n      offset++;\r\n    } else if (c_state == HEADER_66 &amp;&amp; offset &gt;= DATA_LENGHT) {  \/\/ \u6570\u636e\u7ed3\u675f\uff0c\u8bfb\u53d6\u6821\u9a8c\u548c\r\n      checks = c;\r\n      c_state = HEADER_99;\r\n    } else if (c_state == HEADER_99) {\r\n      if ((checksum &amp; 0xFF) == checks &amp;&amp; c == 0x99)           \/\/ \u5224\u65ad\u6821\u9a8c\u548c\r\n        evaluateCommand();                                    \/\/ \u6570\u636e\u5904\u7406\u7a0b\u5e8f\r\n      c_state = IDLE;                                         \/\/ \u8fd4\u56deIDLE\u72b6\u6001\r\n    }\r\n  }\r\n}\r\n\r\n\/*****************************************************************\r\n    \u6570\u636e\u5904\u7406\u7a0b\u5e8f\uff0c\u5c06\u83b7\u53d6\u5230\u7684\u6570\u636e\u505a\u5904\u7406\uff0c\u6267\u884c\u76f8\u5bf9\u5e94\u7684\u6307\u4ee4\r\n ******************************************************************\/\r\nvoid evaluateCommand() {\r\n  Serial.print(\"evaluateCommand :\");\r\n  Serial.print(Data[ELE]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[AIL]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[THR]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[RUDD]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[FLAG]);\r\n  Serial.println(\"\");\r\n  \r\n  \/\/ <span style=\"color: #ff0000;\">Control Servo or DC Motor<\/span>\r\n  \r\n}<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a<\/p>\n<ul>\n<li>\u70e7\u5236\u7a0b\u5e8f\u65f6\u5fc5\u987b\u62d4\u6389RX\u7ebf\uff0c\u5426\u5219\u4f1a\u56e0\u4e3a0\u30011\u4e32\u53e3\u88ab\u5360\u7528\u5bfc\u81f4avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00\u9519\u8bef\uff0c\u62d4\u6389RX\u7ebf\u91cd\u65b0\u70e7\u5236\uff0c\u70e7\u5236\u5b8c\u6bd5\u518d\u63d2\u4e0a\u5c31\u884c\u4e86\u3002<\/li>\n<li>\u70e7\u5236\u5b8c\u6bd5\u540e\u5982\u679c\u56fe\u4f20\u4e0d\u80fd\u6b63\u5e38\u663e\u793a\uff0c\u53ef\u4ee5\u7ed9\u677f\u5b50\u91cd\u65b0\u4e0a\u4e0b\u7535\uff0c\u5e76\u68c0\u67e5\u8fde\u7684WIFI\u662f\u5426\u6b63\u786e\u3002<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>3.\u5c0f\u8f66\u63a7\u5236\u6d4b\u8bd5<\/h3>\n<p>\u4ee3\u7801\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\">\/*\r\n  wifi\u56fe\u4f20\u6a21\u5757+arduino+l298n\u5236\u4f5c\u7684wifi\u89c6\u9891\u5c0f\u8f66\r\n\r\n  \u786c\u4ef6\u8fde\u7ebf:\r\n    Arduino Pin     Wifi\u89c6\u9891\u4f20\u8f93\u6a21\u5757\r\n    3.3v --------   VCC\r\n    GND  --------   GND\r\n    RX   --------   TX\r\n\r\n  \u539f\u7406\u8bf4\u660e\uff1a\u56fe\u4f20\u548c\u63a7\u5236\u90fd\u5728SWLTOY-WIFI\u89c6\u9891\u6a21\u7ec4+APP\u91cc\uff0carduino\u4ec5\u7528\u4e8e\u901a\u8fc7\u6a21\u7ec4\u63a5\u6536\u6765\u81eaAPP\u7684\u63a7\u5236\u4fe1\u53f7\r\n    -Wifi\u6444\u50cf\u5934\u6a21\u7ec4\u5185\u7f6e\u6709\u5355\u7247\u673a\uff0c\u4f9b\u7535\u7ebf\u4f9b\u7535\u540e\u5373\u542f\u52a8wifi\uff0c\u5e76\u63d0\u4f9b\u4e0eWLUFO APP\u56fe\u4f20\u548c\u63a7\u5236\u4fe1\u53f7\u4ea4\u4e92\u80fd\u529b\u3002\u548c\u90e8\u5206\u80fd\u529b\u4e0earduino\u65e0\u5173\uff0c\u79bb\u5f00arduino\u5355\u72ecv3.3\u4f9b\u7535\u5373\u53ef\u4f7f\u7528\r\n    -\u4fe1\u53f7\u7ebf\u8fde\u63a5\u5230arduino RX\u7aef\u53e3\u540e\uff0carduino\u53ef\u901a\u8fc719200\u4e32\u53e3\u4e0eWifi\u6444\u50cf\u5934\u6a21\u7ec4\u901a\u4fe1\uff0c\u83b7\u53d6WLUFO APP\u91cc\u64cd\u4f5c\u7684\u63a7\u5236\u4fe1\u53f7\uff0c\u5e76\u8fdb\u884c\u540e\u7eed\u8235\u673a\u6216\u7535\u673a\u64cd\u4f5c\u5373\u53ef\r\n*\/\r\n\r\n\r\n\/\/ \u56fe\u4f20\u6a21\u5757\u4e32\u53e3\u6570\u636e\r\n#define DATA_LENGHT 5\r\nstatic uint8_t Data[5] = {0, 0, 0, 0, 0};\r\nstatic uint8_t DIR = 0;   \/\/\u5de6\u8f6c128-88\uff0c\u53f3\u8f6c128-168\r\nstatic uint8_t RUN = 1;   \/\/\u524d\u8fdb128-168\uff0c\u540e\u9000128-88\r\nstatic uint8_t THR = 2;   \/\/\u6cb9\u95e80-255\r\nstatic uint8_t RUDD = 3;  \/\/\u65b9\u54110-128-255\r\nstatic uint8_t FLAG = 4;\r\nstatic uint32_t checksum;\r\n\r\n\/\/ \u9a6c\u8fbe\u5f15\u811a\r\nint DC_LEFT1 = 5; \/\/ \u5b9a\u4e49uno\u7684pin 5 \u5411 DC_LEFT1 \u8f93\u51fa\r\nint DC_LEFT2 = 6; \/\/ \u5b9a\u4e49uno\u7684pin 6 \u5411 DC_LEFT2 \u8f93\u51fa\r\nint DC_RIGHT1 = 9; \/\/ \u5b9a\u4e49uno\u7684pin 9 \u5411 DC_RIGHT1 \u8f93\u51fa\r\nint DC_RIGHT2 = 10; \/\/ \u5b9a\u4e49uno\u7684pin 10 \u5411 DC_RIGHT2 \u8f93\u51fa\r\nint DC_SPEED_LEFT = 180;  \/\/\u901f\u5ea6\r\nint DC_SPEED_RIGHT = 170;  \/\/\u901f\u5ea6\r\n\r\n\/\/\u7a0b\u5e8f\u521d\u59cb\u5316\r\nvoid setup() {\r\n  \/\/ \u542f\u52a8\u56fe\u4f20\u4e32\u53e3\u901a\u4fe1\u5e76\u53d1\u9001\u6307\u4ee4\r\n  Serial.begin(19200);\r\n  Serial.println(\"Begin...\");\r\n  \r\n  \/\/ \u521d\u59cb\u5316\u9a6c\u8fbe\u5f15\u811a\u4e3a\r\n  pinMode(DC_LEFT1, OUTPUT);\r\n  pinMode(DC_LEFT2, OUTPUT);\r\n  pinMode(DC_RIGHT1, OUTPUT);\r\n  pinMode(DC_RIGHT2, OUTPUT);\r\n  \r\n  delay(100);\r\n}\r\n\r\n\r\n\/\/\u4e3b\u7a0b\u5e8f\u8fd0\u884c\r\nvoid loop() {      \r\n  \/\/ \u8bfb\u53d6\u4e32\u53e3\u6307\u4ee4\u6570\u636e\r\n  readSerialCom();\r\n}\r\n\r\n\r\n\/\/\u8bfb\u53d6\u4e32\u53e3\u6570\u636e\r\nvoid readSerialCom() {  \r\n  uint8_t c, checks;\r\n  static uint8_t offset;\r\n  static enum _serial_state {\r\n    IDLE,\r\n    HEADER_66,\r\n    HEADER_99,\r\n  }\r\n  c_state;\r\n  while (Serial.available()) {\r\n    c = Serial.read();                                        \/\/ \u8bfb\u4e32\u53e3\u7f13\u51b2\u533a\r\n    if (c_state == IDLE) {                                    \/\/ \u4e32\u53e3\u72b6\u6001\u7a7a\u95f2,\u7b49\u5f85HEADER_66\u72b6\u6001\u7684\u5230\u6765\r\n      c_state = (c == 0x66) ? HEADER_66 : IDLE;               \/\/ \u5224\u65ad\u662f\u5426\u8fdb\u5165HEADER_66\r\n      offset = 0;\r\n      checksum = 0;\r\n      for (int i = 0 ; i &lt; 5; i++)\r\n        Data[i] = 0;\r\n    } else if (c_state == HEADER_66 &amp;&amp; offset &lt; DATA_LENGHT) {   \/\/ \u8fdb\u5165 HEADER_66 \u72b6\u6001\uff0c\u8bfb\u53d6\u6570\u636e\r\n      Data[offset] = c;\r\n      checksum ^= c;                                             \/\/ \u6821\u9a8c\u548c\r\n      offset++;\r\n    } else if (c_state == HEADER_66 &amp;&amp; offset &gt;= DATA_LENGHT) {  \/\/ \u6570\u636e\u7ed3\u675f\uff0c\u8bfb\u53d6\u6821\u9a8c\u548c\r\n      checks = c;\r\n      c_state = HEADER_99;\r\n    } else if (c_state == HEADER_99) {\r\n      if ((checksum &amp; 0xFF) == checks &amp;&amp; c == 0x99){           \/\/ \u5224\u65ad\u6821\u9a8c\u548c\r\n        \/\/ \u6267\u884c\u4e32\u53e3\u53d1\u6765\u7684\u6307\u4ee4\r\n        execSerialCommand();       \r\n      }                             \r\n      c_state = IDLE;                                         \/\/ \u8fd4\u56deIDLE\u72b6\u6001\r\n    }\r\n  }\r\n}\r\n\r\n\r\n\/\/ \u6267\u884c\u4e32\u53e3\u53d1\u6765\u7684\u6307\u4ee4\r\nvoid execSerialCommand() {\r\n  \/*Serial.print(\"execSerialCommand :\");\r\n  Serial.print(Data[DIR]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[RUN]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[THR]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[RUDD]);\r\n  Serial.print(\" \");\r\n  Serial.print(Data[FLAG]);\r\n  Serial.println(\"\");*\/\r\n\r\n  \/\/\u6307\u4ee4\u5904\u7406\r\n  \/\/  RUN \u524d\u8fdb138-168\uff0c\u540e\u9000118-88\r\n  \/\/  DIR \u5de6\u8f6c118-88\uff0c\u53f3\u8f6c138-168\r\n  if (Data[RUN] &gt; 0 &amp;&amp; Data[DIR] &gt; 0) {\r\n    if (Data[RUN] &gt;= 138 &amp;&amp; Data[RUN] &lt;= 168 &amp;&amp; Data[DIR] &gt;= 138 &amp;&amp; Data[DIR] &lt;= 168) { \/\/\u524d+\u53f3\r\n      \/\/Serial.println(\"UP RIGHT\");\r\n      \/\/forward + right \u5411\u524d\u53f3\u8f6c\r\n      analogWrite(DC_LEFT1, DC_SPEED_LEFT);   \/\/pwm\u8c03\u901f\r\n      digitalWrite(DC_LEFT2, LOW);\r\n      analogWrite(DC_RIGHT1, DC_SPEED_RIGHT * (168 - Data[DIR])\/(168-128));   \/\/pwm\u8c03\u901f\r\n      digitalWrite(DC_RIGHT2, LOW);\r\n    }\r\n    else if (Data[RUN] &gt;= 138 &amp;&amp; Data[RUN] &lt;= 168 &amp;&amp; Data[DIR] &gt;= 88 &amp;&amp; Data[DIR] &lt;= 118) { \/\/\u524d+\u5de6\r\n      \/\/Serial.println(\"UP LEFT\");\r\n      \/\/forward + left \u5411\u524d\u5de6\u8f6c\r\n      analogWrite(DC_LEFT1, DC_SPEED_LEFT * (Data[DIR] - 88)\/(128-88));   \/\/pwm\u8c03\u901f\r\n      digitalWrite(DC_LEFT2, LOW);\r\n      analogWrite(DC_RIGHT1, DC_SPEED_RIGHT);   \/\/pwm\u8c03\u901f\r\n      digitalWrite(DC_RIGHT2, LOW);\r\n    }\r\n    else if (Data[RUN] &gt;= 88 &amp;&amp; Data[RUN] &lt;= 118 &amp;&amp; Data[DIR] &gt;= 88 &amp;&amp; Data[DIR] &lt;= 118) { \/\/\u540e+\u5de6\r\n      \/\/Serial.println(\"DOWN LEFT\");\r\n      \/\/back + left \u5411\u5de6\u540e\u8f6c\r\n      digitalWrite(DC_LEFT1, LOW);\r\n      analogWrite(DC_LEFT2, DC_SPEED_LEFT);\r\n      digitalWrite(DC_RIGHT1, LOW);\r\n      analogWrite(DC_RIGHT2, DC_SPEED_RIGHT * (Data[DIR] - 88)\/(128-88));\r\n    }\r\n    else if (Data[RUN] &gt;= 88 &amp;&amp; Data[RUN] &lt;= 118 &amp;&amp; Data[DIR] &gt;= 138 &amp;&amp; Data[DIR] &lt;= 168) { \/\/\u540e+\u53f3\r\n      \/\/Serial.println(\"DOWN RIGHT\");\r\n      \/\/back + right \u5411\u53f3\u540e\u8f6c\r\n      digitalWrite(DC_LEFT1, LOW);\r\n      analogWrite(DC_LEFT2, DC_SPEED_LEFT * (168 - Data[DIR])\/(168-128));\r\n      digitalWrite(DC_RIGHT1, LOW);\r\n      analogWrite(DC_RIGHT2, DC_SPEED_RIGHT);\r\n    }\r\n    else if (Data[RUN] &gt;= 138 &amp;&amp; Data[RUN] &lt;= 168) { \/\/\u524d\r\n      \/\/Serial.println(\"UP\");\r\n      \/\/forward \u5411\u524d\u8f6c\r\n      analogWrite(DC_LEFT1, DC_SPEED_LEFT);   \/\/pwm\u8c03\u901f\r\n      digitalWrite(DC_LEFT2, LOW);\r\n      analogWrite(DC_RIGHT1, DC_SPEED_RIGHT);   \/\/pwm\u8c03\u901f\r\n      digitalWrite(DC_RIGHT2, LOW);\r\n    }\r\n    else if (Data[RUN] &gt;= 88 &amp;&amp; Data[RUN] &lt;= 118) { \/\/\u540e\r\n      \/\/Serial.println(\"DOWN\");\r\n      \/\/back \u5411\u540e\u8f6c\r\n      digitalWrite(DC_LEFT1, LOW);\r\n      analogWrite(DC_LEFT2, DC_SPEED_LEFT);\r\n      digitalWrite(DC_RIGHT1, LOW);\r\n      analogWrite(DC_RIGHT2, DC_SPEED_RIGHT);\r\n    }\r\n    else if (Data[DIR] &gt;= 88 &amp;&amp; Data[DIR] &lt;= 118) { \/\/\u5de6\r\n      \/\/Serial.println(\"LEFT\");\r\n      \/\/left\r\n      digitalWrite(DC_LEFT1, LOW);\r\n      analogWrite(DC_LEFT2, DC_SPEED_LEFT);\r\n      analogWrite(DC_RIGHT1, DC_SPEED_RIGHT);\r\n      digitalWrite(DC_RIGHT2, LOW);\r\n    }\r\n    else if (Data[DIR] &gt;= 138 &amp;&amp; Data[DIR] &lt;= 168) { \/\/\u53f3\r\n      \/\/Serial.println(\"RIGHT\");\r\n      \/\/right\r\n      analogWrite(DC_LEFT1, DC_SPEED_LEFT);   \/\/pwm\u8c03\u901f\r\n      digitalWrite(DC_LEFT2, LOW);\r\n      digitalWrite(DC_RIGHT1, LOW);\r\n      analogWrite(DC_RIGHT2, DC_SPEED_RIGHT);\r\n    }\r\n    else if (Data[RUN] == 128 &amp;&amp; Data[DIR] == 128) {  \/\/\u505c\r\n      \/\/Serial.println(\"STOP\");\r\n      \/\/stop \u505c\u6b62\r\n      digitalWrite(DC_LEFT1,LOW);\r\n      digitalWrite(DC_LEFT2,LOW);\r\n      digitalWrite(DC_RIGHT1,LOW);\r\n      digitalWrite(DC_RIGHT2,LOW);\r\n    }\r\n  }\r\n\r\n}<\/code><\/pre>\n<p>\u6548\u679c\u89c6\u9891\uff1a<\/p>\n<p>&nbsp;<\/p>\n<div style=\"width: 544px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-6560-1\" width=\"544\" height=\"960\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-tank.mp4?_=1\" \/><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-tank.mp4\">https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-tank.mp4<\/a><\/video><\/div>\n<p>&nbsp;<\/p>\n<div style=\"width: 625px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-6560-2\" width=\"625\" height=\"352\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-tank-move.mp4?_=2\" \/><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-tank-move.mp4\">https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/07\/wifi-camera-tank-move.mp4<\/a><\/video><\/div>\n<p>&nbsp;<\/p>\n<p>yan 22.7.7<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u8c03\u78144G\u56fe\u4f20\u63a7\u5236\u6a21\u7ec4\uff0c\u53d1\u73b0\u4e00\u4e2a\u4e0d\u9519\u7684wifi\u56fe\u4f20\u6a21\u5757\uff0c\u7528\u8d77\u6765\u5f88\u7b80\u5355\uff0c\u4f46\u662f\u53ea\u80fd\u57fa\u4e8e\u6a21\u7ec4\u81ea\u8eab\u7684wifi\u4fe1\u53f7\u4f20\u8f93 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[353],"tags":[354,837,1219],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6560"}],"collection":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6560"}],"version-history":[{"count":3,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6560\/revisions"}],"predecessor-version":[{"id":6597,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6560\/revisions\/6597"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}