{"id":748,"date":"2023-09-05T22:31:03","date_gmt":"2023-09-05T14:31:03","guid":{"rendered":"http:\/\/www.inhhh.com\/blog\/?p=748"},"modified":"2023-09-05T22:31:03","modified_gmt":"2023-09-05T14:31:03","slug":"esp8266ledwifi","status":"publish","type":"post","link":"http:\/\/www.inhhh.com\/blog\/?p=748","title":{"rendered":"ESP8266+LED+WIFI"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>#include &lt;ESP8266WiFi.h>\n#include &lt;time.h>\n#include &lt;stdlib.h>\n#include \"LedControl.h\"\n\n\n\n\/\/ function declare  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>\nvoid SetupSerial();\nvoid SetupWifiScan();\nvoid SetupWifiClient();\nint ConnectWifi(const char* ssid, const char* password);\nvoid ConnectMulitWif();\nint WifiScan();\nvoid DebugPrint(String FuncName, int id, String Desc);\nString GetRpiServerIP(void);\nvoid ClearLcd(LedControl lca1, int manlcd);\nvoid showLEDData(int nmaxRow,int nmaxCol);\nvoid loopWebServer();\nString DealWith(String strCommand);\nvoid SetupWifiWebServer() ;\nvoid DisplayIP();\n\/\/ function declare &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==\n\n\n\/\/Define ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>\n\n\n#define PIN_CAR_L1 1\n#define PIN_CAR_L2 3\n#define PIN_CAR_R1 15\n#define PIN_CAR_R2 13\n\n#define PIN_CAR_LPWM 12\n#define PIN_CAR_RPWM 14\n\n\n#define MX_CLOCK3        16\n#define MX_CS3           5\n#define MX_DIN3          4\n\n#define MX_CLOCK2        4\n#define MX_CS2           0\n#define MX_DIN2         2\n\n#define MX_CLOCK1        12\n#define MX_CS1           13\n#define MX_DIN1          15\n\n\n#define MX_LED          16\n\n#define MX_COLUMNS       32\n#define MX_ROWS          4\n\n\n#define DEBUG true\n\n#define DEVDEBUG true\n\n\/\/Define &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==\n\n\/\/ varable ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>\n\nconst char * g_ssid&#91;]={\"RobotWifi\",\"Casey_swb013\",\"ChinaNet-Mb5T\",\"casey\"};\nconst char * g_password&#91;]={\"19888888\",\"itd888888\",\"s5nwgbgx\",\"Cs2017@$\"};\n\nconst int   g_ssidNum=4;\n\nconst int g_rowSetting&#91;] ={7,6,5,4,3,2,1,0};\n\n\nString g_LEDData=\"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\";\nString g_preLEDData=\"123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\";\n\nint g_preclickval&#91;4]={0,0,0,0};\nint value = 0;\nWiFiServer server(80);\n\/\/String g_strIP\uff1d\"192.168.1.17\";\n\n\n\nbyte CharAscii&#91;128]&#91;8] = {\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  1\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  2\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  3\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  4\n\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  5\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  6\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  7\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  8\n\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  9\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  10\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  11\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/  12\n\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0x01},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x02},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x03},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x04},  \/\/  13\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0x05},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x06},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x07},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x08},  \/\/   14\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0x09},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0xF0},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0xF1},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0xF2},  \/\/  15\n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xF3},  {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0xF4},  {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0xF5},  {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0xF6},  \/\/  16\n  \n{0x38,0x38,0x6C,0x6C,0x7C,0xFC,0xC6,0xC3}, {0x7C,0x7E,0x66,0x7C,0x7C,0x66,0x7E,0x7C}, {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E}, {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78},  \/\/ABCD  \n{0x7C,0x7C,0x60,0x7C,0x7C,0x60,0x7C,0x7C}, {0x7E,0x7E,0x60,0x7E,0x7E,0x60,0x60,0x60}, {0x78,0xFC,0xCC,0xC0,0xDC,0xCC,0x6C,0x7C}, {0x66,0x66,0x66,0x7E,0x7E,0x66,0x66,0x66},  \n{0x7E,0x7E,0x18,0x18,0x18,0x18,0x7E,0x7E}, {0x7E,0x0C,0x0C,0x0C,0x0C,0x5C,0xFC,0x78}, {0x66,0x6C,0x78,0x70,0x70,0x78,0x6C,0x66}, {0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x7E},\n{0xE7,0xFF,0xFF,0xDB,0xDB,0xDB,0xC3,0xC3}, {0xE3,0xF3,0xFB,0xDB,0xCF,0xC7,0xC7,0xC3}, {0x7E,0x7E,0x66,0x66,0x66,0x66,0x7E,0x7E}, {0x78,0x7C,0x66,0x66,0x6C,0x78,0x60,0x60},  \n{0x3C,0x7E,0x66,0x66,0x66,0x66,0x7E,0x3B}, {0x7C,0x7E,0x66,0x7E,0x78,0x6C,0x66,0x62}, {0x7E,0x7C,0x60,0x7C,0x3E,0x06,0x3E,0x7E}, {0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18}, \n{0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x7E}, {0xC1,0xE3,0x63,0x36,0x36,0x1C,0x18,0x18}, {0x80,0x81,0xC9,0x49,0x6B,0x3A,0x16,0x14}, {0x81,0xC3,0x66,0x3C,0x1C,0x3C,0x66,0xC3}, \/\/uvwx\n{0x81,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18}, {0x7F,0x7F,0x6,0x1C,0x1C,0x30,0x7F,0xFF},  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, \/\/-\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\n{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}\n};\n\n\nbyte eight&#91;8]= {0x7E,0x7E,0x66,0x7E,0x7E,0x66,0x7E,0x7E}; \nbyte dot&#91;8]=   {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18};  \nbyte smile&#91;8]=   {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};\nbyte neutral&#91;8]= {0x3C,0x42,0xA5,0x81,0xBD,0x81,0x42,0x3C};\n\n\n\/\/ varable  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==  &lt;==\n\n\n\nString m_strInputData=\"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\";\n\nbyte chrShowData&#91;4]&#91;32] ={{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,\n                        B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000},\n\n                        {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,\n                        B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000},\n\n                        {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,\n                        B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000},\n\n                        {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,\n                        B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}};\n\nbyte g_chrShowData&#91;4]&#91;32] ={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},\n\n                        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},\n\n                        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},\n\n                        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};\n\n\/*\n Now we need a LedControl to work with.\n ***** These pin numbers will probably not work with your hardware *****\n pin 4 is connected to the DataIn\n pin 16 is connected to the CLK\n pin  is connected to LOAD\n We have only a single MAX72XX.\n *\/\nLedControl lc1=LedControl(MX_DIN1, MX_CLOCK1, MX_CS1,8);\nLedControl lc2=LedControl(MX_DIN2, MX_CLOCK2, MX_CS2,8);\n\n\n\/* we always wait a bit between updates of the display *\/\nunsigned long delaytime=100;\n\n\/\/ FUNCTION DEFINE ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>\n\n\/\/ FUNCTION DEFINE &#91;Setup]==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==>  ==> ==>  ==>\n\nvoid SetupSerial()\n{\n    Serial.begin(115200);\n    while (!Serial)\n    {\n        delay(100);\n    }\n}\n\nvoid SetupWifiWebServer() \n{\n    pinMode(2, OUTPUT);\n    digitalWrite(2, 0);\n    server.begin();\n    Serial.println(\"Server started\");\n}\n\nvoid DebugPrint(String FuncName, int id, String Desc)\n{\n    Serial.print(FuncName);\n    Serial.print(\"&#91;\");\n    Serial.print(id);\n    Serial.print(\"]::\");\n    Serial.println(Desc);\n}\n\nvoid SetupWifiScan()\n{\n    WiFi.mode(WIFI_STA);\n    WiFi.disconnect();\n    delay(100);\n    Serial.println(\"wifi scan Setup done\");\n}\n\n\n\nString  GetRpiServerIP(void)\n{\n\n  Serial.print(\"connecting to \");\n  Serial.println(\"www.inhhh.com\");\n    String strAllLines=\"\";\n\n  WiFiClient client;\n\n  if (!client.connect(\"www.inhhh.com\", 80))\n  {\n    Serial.println(\"connection failed\");\n    return \"\";\n  }\n\n\n  String url = \"\/Arduino\/API.php?QUERYTYPE=GETLEDBYCHARD&amp;QUERYVALUE=&amp;SPLITID=LED001\";\n\n  client.print(String(\"GET \") + url + \" HTTP\/1.1\\r\\n\" +\n               \"Host: www.inhhh.com\\r\\n\" +\n               \"Connection: close\\r\\n\\r\\n\");\n  unsigned long timeout = millis();\n  while (client.available() == 0)\n  {\n    if (millis() - timeout > 2000)\n    {\n        Serial.println(\">>> Client Timeout !\");\n        client.stop();\n        return strAllLines;\n    }\n  }\n\n  int ln2=0;\n  int ln1 = strAllLines.indexOf(\"|\");\n  int ln3=1;\n  while(client.available() &amp;&amp; ln3==1)\n  {\n    String line = client.readStringUntil('\\r');\n    if(line.length()>5)\n    {\n      int ln1 = line.indexOf(\"|\");\n      strAllLines = strAllLines + line;\n      if(ln1>0)\n        ln2++;\n\n      if(ln2>=2)\n         ln3=0;\n\n    }\n  }\n\n  Serial.println();\n\n\n  g_LEDData = strAllLines;\n  int line20181228 = strAllLines.indexOf(\"|\");\n  Serial.println(line20181228);\n  g_LEDData = strAllLines.substring(line20181228+1);\n\n  int line201812282 = g_LEDData.indexOf(\"|\");\n  g_LEDData = g_LEDData.substring(0,line201812282);\n\n  int ntry=20;\n  while(ntry>=0)\n  {\n      int l2 = g_LEDData.indexOf(\"\\r\");\n      if(l2>0)\n      {\n          g_LEDData = g_LEDData.substring(0,l2)+ g_LEDData.substring(l2+1);\n          ntry--;\n        }\n      else\n        ntry=-2;\n  }\n\n   ntry=20;\n  while(ntry>=0)\n  {\n      int l2 = g_LEDData.indexOf(\"\\n\");\n      if(l2>0)\n      {\n          g_LEDData = g_LEDData.substring(0,l2)+ g_LEDData.substring(l2+1);\n          ntry--;\n        }\n      else\n        ntry=-2;\n  }\n  \nSerial.println(\"closing connection>>\");\nSerial.println(g_LEDData);\nSerial.println(\"closing connection&lt;&lt;\");\n\n  return \"\";\n }\n\nint WifiScan()\n{\n    String strThisFunc=\"WifiScan\";\n    DebugPrint(strThisFunc.c_str(),1,\"scan start\");\n\n    Serial.println(\"WifiScan&#91;1]!!!\");\n    int n = WiFi.scanNetworks();\n    int nstatus = 0;\n\n    DebugPrint(strThisFunc.c_str(),2,\"scan done\");\n\n    if (n == 0)\n    {\n        \/\/Serial.println(\"no networks found\");\n        DebugPrint(strThisFunc.c_str(),3,\"no networks found!\");\n    }\n    else\n    {\n        Serial.print(n);\n\n        DebugPrint(strThisFunc.c_str(),n,\"n\");\n\n        DebugPrint(strThisFunc.c_str(),n,\"networks found\");\n        for (int i = 0; i &lt; n; ++i)\n        {\n\n            DebugPrint(strThisFunc.c_str(),i+1,\"i\") ;\n            DebugPrint(strThisFunc.c_str(),103,WiFi.SSID(i)) ;\n            DebugPrint(strThisFunc.c_str(),WiFi.RSSI(i),\"\") ;\n            delay(10);\n        }\n\n        for(int j =0 ; j&lt; g_ssidNum;j++)\n        {\n            for (int i = 0; i &lt; n; ++i)\n            {\n                String ssidname = WiFi.SSID(i);\n                if(strcmp(g_ssid&#91;j], ssidname.c_str())==0 &amp;&amp; nstatus ==0)\n                {\n                      nstatus = ConnectWifi(g_ssid&#91;j], g_password&#91;j]);\n                      if(nstatus >0)\n                      {\n\n                          String strip1 = String(WiFi.localIP());\n                          String strMac1 = String(WiFi.macAddress());\n                          DebugPrint(\"WifiScan\",  i+1, strip1);\n                          DebugPrint(\"WifiScan\", i+1, strMac1);\n                          return nstatus;\n                      }\n                }\n            }\n        }\n\n\n    }\n   \/\/ Serial.println(\"\");\n    return nstatus;\n}\n\nint ConnectWifi(const char* ssid, const char* password)\n{\n\n    int ntrytime = 0;\n    const int nmaxtrytime =10;\n    Serial.println();\n    Serial.println();\n    Serial.print(\"Connecting to \");\n    Serial.println(ssid);\n\n    WiFi.mode(WIFI_STA);\n    WiFi.begin(ssid, password);\n\n    while (WiFi.status() != WL_CONNECTED &amp;&amp; ntrytime &lt; nmaxtrytime)\n    {\n        delay(500);\n        Serial.print(\".\");\n        ntrytime++;\n    }\n    Serial.println(\"\");\n\n    if (ntrytime &lt; 10)\n    {\n        Serial.println(\"WiFi connected.\");\n        Serial.println(\"IP address: \");\n        Serial.println(WiFi.localIP());\n        String strIP = String(WiFi.localIP());;\n        Serial.println(WiFi.macAddress());\n        \n        digitalWrite(LED_BUILTIN, HIGH);\n        return 1;\n    }\n    Serial.println(\"Wifi Connect Fail\");\n    return 0;\n}\n\nvoid ConnectMulitWif()\n{\n    int n1 = 0;\n    while (n1 == 0)\n    {\n        n1 = WifiScan();\n    }\n}\n\n\nvoid ConvertLEDData(String strInputData1)\n{\n\n    String strInputData=g_LEDData;\n    \n    if(strInputData==\"\")\n    {\n        Serial.println(\"no data ==>\");\n        Serial.println(\"no data \u300a\u300a==\");\n        return;\n    }\n\n    if(g_LEDData == g_preLEDData)\n        return;\n    \n    \n    \n    strInputData =strInputData+\"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";\n    int nLedPreRow=MX_COLUMNS\/8;\n    for(int g1=0;g1&lt;MX_COLUMNS;g1++)\n    {\n        int nstart=g1*8;\n        int g4 = g1%8;\n\n\n        String substring1 = strInputData.substring(nstart,nstart+8);\n        Serial.print(\"-substring1&#91;\");\n        Serial.print(substring1);\n        Serial.println(\"]-\");\n        for(int i =0;i&lt;MX_ROWS;i++)\n        {\n\n            Serial.print(\"-led&#91;\");\n            \/\/Serial.print(nLed);\n            Serial.print(\"]-\");\n            \n            String \n            substring2 = substring1.substring(i*2+1,i*2+2);\n            Serial.print(\"-str1&#91;\");\n            Serial.print(substring2);\n            Serial.print(\"]-\");\n            \n            int h2=0;\n            int h1=0;\n            h2=ConvertStringToInt(substring2,1);\n \n   \n           h1=h2;\n           \n           substring2 = substring1.substring(i*2,i*2+1);\n           Serial.print(\"-str2&#91;\");\n            Serial.print(substring2);\n            Serial.print(\"]-\");\n            \n            h2=ConvertStringToInt(substring2,16);\n            h1=h1+h2;\n\n            g_chrShowData&#91;i]&#91;g1]=h1;\n\n        }\n        Serial.println(\"\");\n   }\n   \n\n\n}\n\n\n\nint ConvertStringToInt(String str1, int type1)\n{\n    if(str1==\"A\" || str1==\"a\")\n        return 5*type1;\n    else if(str1==\"B\" || str1==\"b\")\n        return 13*type1;\n    else if(str1==\"C\" || str1==\"c\")\n        return 3*type1;\n    else if(str1==\"D\" || str1==\"d\")\n        return 11*type1;\n    else if(str1==\"E\" || str1==\"e\")\n        return 7*type1;\n    else if(str1==\"F\" || str1==\"f\")\n        return 15*type1;\n    else if(str1==\"9\")\n        return 9*type1;\n    else if(str1==\"8\")\n        return 1*type1;\n    else if(str1==\"7\")\n        return 14*type1;\n    else if(str1==\"6\")\n        return 6*type1;\n    else if(str1==\"5\")\n        return 10*type1;\n    else if(str1==\"4\")\n        return 2*type1;\n    else if(str1==\"3\")\n        return 12*type1;\n    else if(str1==\"2\" )\n        return 4*type1;\n    else if(str1 ==\"1\" )\n        return 8*type1;\n    else\n        return 0;\n    \n}\n\nvoid ClearLcd(LedControl lca1, int manlcd)\n{\n   for(int i=0;i&lt;manlcd;i++)\n    {\n        lca1.shutdown(i,false);\n        lca1.setIntensity(i,8);\n        lca1.clearDisplay(i);\n    }\n}\n\nvoid loopWebServer() \n{\n    \/\/ Check if a client has connected\n    WiFiClient client = server.available();\n    if (!client) \n    {\n      return;\n    }\n    Serial.println(\",,\");\n    \/\/ Wait until the client sends some data\n    Serial.println(\"new client\");\n    while (!client.available()) \n    {\n      delay(1);\n    }\n    \n    String req = client.readStringUntil('\\r');\n    Serial.println(req);\n    client.flush();\n\n    int nget1 = req.indexOf(\"GET \/ HTTP\/1.1\");\n    int nget2 = req.indexOf(\"GET \/favicon.ico HTTP\/1.1\");\n    \n    int npost1 = req.indexOf(\"POST\");\n    int npost2 = req.indexOf(\"POST \/\");\n\n    \n    String strResult = \"\";\n    client.flush();\n    String hm2=\"\";\n   if(nget1>=0 || (nget2&lt;0 &amp;&amp; nget1&lt;0  &amp;&amp; npost2&lt;0 &amp;&amp; npost1&lt;0))\n    {\n       hm2=GetHtml(1);\n      Serial.println(hm2);\n      client.println(hm2);\n    }\n    else if(nget2>=0)\n    {\n      hm2=GetHtml(0);\n       Serial.println(hm2);\n       client.println(hm2);\n      }\n     else if(npost2>=0)\n     {\n       DealWith(req);\n       hm2=\" post.ico\";\n       Serial.println(hm2);\n       client.println(hm2);\n\n      }\n    else \n    {\n       hm2=\"fav.ico\";\n       Serial.println(hm2);\n       client.println(hm2);\n      }\n    \n    client.flush();\n    delay(1);\n    \/\/ client.stop();\n    Serial.println(\"Client disonnected\");\n}\n\nString GetHtml(int ntype)\n{\n   String hm2=\"\";\n     hm2 =\n      String(\"HTTP\/1.1 200 OK\\r\\n\") +\n      \"Content-Type: text\/html\\r\\n\" +\n      \"Connection: close\\r\\n\" +  \/\/ the connection will be closed after completion of the response\n      \"Refresh: 600\\r\\n\" +  \/\/ refresh the page automatically every 5 sec\n      \"\\r\\n\" +\n      \"&lt;!DOCTYPE HTML>\" +\n      \"&lt;html>\" +\n      \"&lt;head>\"; \n\n    hm2 = hm2+\" &lt;meta charset=\\\"UTF-8\\\" \/>\\r\\n\";\n    hm2 = hm2+\" &lt;meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge,chrome=1\\\" \/>\\r\\n\";\n    hm2 = hm2+\" &lt;meta name=\\\"viewport\\\" content=\\\"width=380\\\">\\r\\n\";\n    hm2 = hm2+\" &lt;title>\u753b\u677f&lt;\/title>\\r\\n\";\n\n\n    hm2 = hm2+\" &lt;style type=\\\"text\/css\\\">\\r\\n\";\n    hm2 = hm2+\" body { margin: 0; padding: 0; background-color: #ffffff;}\\r\\n\";\n    hm2 = hm2+\" #canvasId { background-color: #FFFFcc;}\\r\\n\";\n    hm2 = hm2+\" .button { width: 30px; height: 30px;}\\r\\n\";\n    hm2 = hm2+\" .canvas {    margin: 100px auto 0;display: block;}\\r\\n\";\n    hm2 = hm2+\" &lt;\/style>\\r\\n\";\n\n    hm2 = hm2+\"&lt;link rel=\\\"icon\\\" href=\\\"data:image\/ico;base64,aWNv\\\">\\r\\n\";\n      \n    hm2 = hm2+\" &lt;\/head>\\r\\n\";\n    hm2 = hm2+\"&lt;body>\\r\\n\";\n    if(ntype==1)\n    {\n      String hm3= GetHtml2();\n      hm2 = hm2+hm3;\n    }\n    \n  \n    hm2 = hm2+\" &lt;\/body>&lt;\/html>\\r\\n\";\n\n    return hm2;\n}\n\nString GetHtml2()\n{\n   String hm2=\"\";\n     \n\n    hm2 = hm2+\"&lt;div align=\\\"center\\\">\u753b\u677f&lt;\/div>\\r\\n\";\n    hm2 = hm2+\"&lt;form id=\\\"form_bil_list\\\" method=\\\"post\\\" action=\\\"API.html\\\">\\r\\n\";\n    hm2 = hm2+\"&lt;div align=\\\"center\\\"> &lt;canvas id=\\\"canvasId\\\" width=\\\"320\\\" height=\\\"320\\\">&lt;\/canvas>&lt;\/div>&lt;br \/>\\r\\n\";\n    \n    hm2 = hm2+\"&lt;div align=\\\"center\\\" >\\r\\n\";\n    hm2 = hm2+\"&lt;table style=\\\"font-size:8;\\\">\\r\\n\";\n    hm2 = hm2+\"&lt;tr>&lt;td >&amp;nbsp;&lt;\/td>\\r\\n\";\n    hm2 = hm2+\"&lt;td >&amp;nbsp;&lt;\/td>\\r\\n\";\n    hm2 = hm2+\"&lt;td >&lt;input type=\\\"button\\\" value=\\\"\u5168\u6e05\\\" class=\\\"button\\\" onclick=\\\"hw.clear();\\\" style=\\\"width: 60px;height: 30px;\\\"\/>&lt;\/td>\\r\\n\";\n    hm2 = hm2+\"&lt;\/tr>&lt;\/table>\\r\\n\";\n    hm2 = hm2+\"&lt;\/div>\\r\\n\";\n    \n    hm2 = hm2+\"&lt;br \/>\\r\\n\";\n   \n    hm2 = hm2+\"&lt;\/form>\\r\\n\";\n    hm2 = hm2+\"&lt;script type=\\\"text\/javascript\\\">\\r\\n\";\n    \n    hm2 = hm2+\"var hexchr = &#91;\\\"0\\\", \\\"1\\\", \\\"2\\\", \\\"3\\\", \\\"4\\\", \\\"5\\\", \\\"6\\\", \\\"7\\\", \\\"8\\\", \\\"9\\\", \\\"A\\\", \\\"B\\\", \\\"C\\\", \\\"D\\\", \\\"E\\\", \\\"F\\\"];\\r\\n\";\n    hm2 = hm2+\"var g_nMaxRows=32;\\r\\n\";\n    hm2 = hm2+\"var g_nMaxCols=32;\\r\\n\";\n    \n    hm2 = hm2+\"var m_inpdate = new Array();\\r\\n\";\n    hm2 = hm2+\"for (var i = 0; i &lt; 32; i++) {\\r\\n\";\n    \n    hm2 = hm2+\"m_inpdate&#91;i] = new Array();\\r\\n\";\n    hm2 = hm2+\"for (var j = 0; j &lt; 32; j++)\\r\\n\";\n    hm2 = hm2+\"m_inpdate&#91;i]&#91;j] = 0;}\\r\\n\";\n\n    hm2 = hm2+\"var m_cellWidht=10;\\r\\n\";\n    hm2 = hm2+\"var m_itemn=1;\\r\\n\";\n\n    hm2 = hm2+\"function ajax() {\\r\\n\";\n    hm2 = hm2+\"var ajaxData = {\\r\\n\";\n    hm2 = hm2+\"type: arguments&#91;0].type || \\\"GET\\\",\\r\\n\";\n    hm2 = hm2+\"url: arguments&#91;0].url || \\\"\\\",\\r\\n\";\n    hm2 = hm2+\"async: arguments&#91;0].async || \\\"true\\\",\\r\\n\";\n    hm2 = hm2+\"data: arguments&#91;0].data || null,\\r\\n\";\n    hm2 = hm2+\"dataType: arguments&#91;0].dataType || \\\"text\\\",\\r\\n\";\n    hm2 = hm2+\"contentType: arguments&#91;0].contentType || \\\"application\/x-www-form-urlencoded\\\",\\r\\n\";\n    hm2 = hm2+\"beforeSend: arguments&#91;0].beforeSend || function () { },\\r\\n\";\n    hm2 = hm2+\"success: arguments&#91;0].success || function () { },\\r\\n\";\n    hm2 = hm2+\"error: arguments&#91;0].error || function () { }}\\r\\n\";\n    hm2 = hm2+\"ajaxData.beforeSend()\\r\\n\";\n    hm2 = hm2+\"var xhr = createxmlHttpRequest();\\r\\n\";\n    hm2 = hm2+\"xhr.responseType = ajaxData.dataType;\\r\\n\";\n    hm2 = hm2+\"xhr.open(ajaxData.type, ajaxData.url, ajaxData.async);\\r\\n\";\n    hm2 = hm2+\"xhr.setRequestHeader(\\\"Content-Type\\\", ajaxData.contentType);\\r\\n\";\n    hm2 = hm2+\"xhr.send(convertData(ajaxData.data));\\r\\n\";\n    hm2 = hm2+\"xhr.onreadystatechange = function () {\\r\\n\";\n    hm2 = hm2+\"if (xhr.readyState == 4) {\\r\\n\";\n    hm2 = hm2+\"if (xhr.status == 200) {\\r\\n\";\n    hm2 = hm2+\"ajaxData.success(xhr.response)\\r\\n\";\n    hm2 = hm2+\"} else {\\r\\n\";\n    hm2 = hm2+\"ajaxData.error()\\r\\n\";\n    hm2 = hm2+\"}}}}\\r\\n\";\n\nhm2 = hm2+\"function createxmlHttpRequest() {\\r\\n\";\n    hm2 = hm2+\"if (window.ActiveXObject) {\\r\\n\";\n        hm2 = hm2+\"return new ActiveXObject(\\\"Microsoft.XMLHTTP\\\");\\r\\n\";\n    hm2 = hm2+\"} else if (window.XMLHttpRequest) {\\r\\n\";\n        hm2 = hm2+\"return new XMLHttpRequest();\\r\\n\";\n    hm2 = hm2+\"}}\\r\\n\";\n\nhm2 = hm2+\"function convertData(data) {\\r\\n\";\n    hm2 = hm2+\"if (typeof data === 'object') {\\r\\n\";\n        hm2 = hm2+\"var convertResult = \\\"\\\";\\r\\n\";\n        hm2 = hm2+\"for (var c in data) {\\r\\n\";\n            hm2 = hm2+\"convertResult += c + \\\"=\\\" + data&#91;c] + \\\"&amp;\\\";\\r\\n\";\n        hm2 = hm2+\"}\\r\\n\";\n        hm2 = hm2+\"convertResult = convertResult.substring(0, convertResult.length - 1)\\r\\n\";\n        hm2 = hm2+\"return convertResult;\\r\\n\";\n    hm2 = hm2+\"} else {\\r\\n\";\n   hm2 = hm2+\"     return data;\\r\\n\";\n   hm2 = hm2+\" }}\\r\\n\";\n\n    \n    hm2 = hm2+\"function Handwriting(id) {\\r\\n\";\n    hm2 = hm2+\"this.canvas = document.getElementById(id);\\r\\n\";\n    hm2 = hm2+\"this.ctx = this.canvas.getContext(\\\"2d\\\");\\r\\n\";\n    hm2 = hm2+\"this.ctx.fillStyle = \\\"rgba(0,0,0,0.25)\\\";\\r\\n\";\n    hm2 = hm2+\"this.canvas.addEventListener(\\\"touchstart\\\", this.downEvent.bind(this), false);\\r\\n\";\n    hm2 = hm2+\"this.canvas.addEventListener(\\\"touchmove\\\", this.moveEvent.bind(this), false);\\r\\n\";\n    hm2 = hm2+\"this.canvas.addEventListener(\\\"touchend\\\", this.upEvent.bind(this), false);\\r\\n\";\n    hm2 = hm2+\"this.canvas.addEventListener(\\\"contextmenu\\\", function(e){ e.preventDefault() }, false);\\r\\n\";\n    hm2 = hm2+\"this.moveFlag = false;\\r\\n\";\n    hm2 = hm2+\"this.upof = {};\\r\\n\";\n    hm2 = hm2+\"this.radius = 0;\\r\\n\";\n    hm2 = hm2+\"this.has = &#91;];\\r\\n\";\n    hm2 = hm2+\"this.startOf = null;\\r\\n\";\n    hm2 = hm2+\"this.lineMax = 30;\\r\\n\";\n    hm2 = hm2+\"this.lineMin = 30;\\r\\n\";\n    hm2 = hm2+\"this.linePressure = 1;\\r\\n\";\n    hm2 = hm2+\"this.smoothness = 80;\\r\\n\";\n    hm2 = hm2+\"this.history = &#91;];\\r\\n\";\n    hm2 = hm2+\"}\\r\\n\";\n    \n    hm2 = hm2+\"Handwriting.prototype.clear = function () {\\r\\n\";\n    hm2 = hm2+\"this.history = &#91;];\\r\\n\";\n    hm2 = hm2+\"this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);\\r\\n\";\n    hm2 = hm2+\" for(var y3=0;y3&lt;=32;y3++)\\r\\n\";\n    hm2 = hm2+\" for(var x3=0;x3&lt;=32;x3++)\\r\\n\";\n    hm2 = hm2+\"  {\\r\\n\";\n    hm2 = hm2+\" m_inpdate&#91;y3]&#91;x3]=0;\\r\\n\";\n    hm2 = hm2+\" }\\r\\n\";\n    hm2 = hm2+\" this.SaveDate();\\r\\n\";\n    hm2 = hm2+\" }\\r\\n\";\n\n    hm2 = hm2+\" Handwriting.prototype.SaveDate = function () \\r\\n\";\nhm2 = hm2+\" {\\r\\n\";\n        hm2 = hm2+\" var allvalue=\\\"=\\\";\\r\\n\";\n        hm2 = hm2+\" var value1=\\\"'\\\";\\r\\n\";\n        hm2 = hm2+\" var m=0;\\r\\n\";\n        hm2 = hm2+\" for(var i =0; i&lt;g_nMaxCols;i++)\\r\\n\";\n        hm2 = hm2+\" {var m=&#91;0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0];\\r\\n\";\n        hm2 = hm2+\" for(var j =0; j&lt;g_nMaxRows;j++)\\r\\n\";\n        hm2 = hm2+\" {m&#91;j] = m_inpdate&#91;j]&#91;i];}\\r\\n\";\n            \n        hm2 = hm2+\" var n=0;\\r\\n\";\n        hm2 = hm2+\" for(var j=0;j&lt;g_nMaxRows\/4;j++){\\r\\n\";\n        hm2 = hm2+\" var a1 =   m&#91;j*4];\\r\\n\";\n               hm2 = hm2+\" var a2 =   m&#91;j*4+1];\\r\\n\";\n               hm2 = hm2+\" var a3 =   m&#91;j*4+2];\\r\\n\";\n               hm2 = hm2+\" var a4 =   m&#91;j*4+3];\\r\\n\";\n               hm2 = hm2+\" var a5 = a4*8+ a3*4+ a2*2 + a1;\\r\\n\";\n\n      hm2 = hm2+\" if (a5 >= 0 &amp;&amp; a5 &lt;= 15) {\\r\\n\";\n      hm2 = hm2+\" var chr5 = hexchr&#91;a5];\\r\\n\";\n      hm2 = hm2+\"  allvalue = allvalue + chr5;\\r\\n\";\n      hm2 = hm2+\" }else {\\r\\n\";\n      hm2 = hm2+\" allvalue = allvalue + \\\"0\\\";}\\r\\n\";\n      hm2 = hm2+\" }}\\r\\n\";\n\n    hm2 = hm2+\" var url1=\\\"API.html?ShowLedPicture\\\"+allvalue+\\\"\\\";\\r\\n\";\n    hm2 = hm2+\" ajax({\\r\\n\";\n       hm2 = hm2+\"  type: \\\"POST\\\",\\r\\n\";\n       hm2 = hm2+\"  url: url1,\\r\\n\";\n       hm2 = hm2+\"  dataType: \\\"json\\\",\\r\\n\";\n\n        hm2 = hm2+\" data: \\\"\\\",\\r\\n\";\n       hm2 = hm2+\"  beforeSend: function () {\\r\\n\";\n       \n       hm2 = hm2+\"  }, success: function (msg) {\\r\\n\";\n            \n       hm2 = hm2+\"  },\\r\\n\";\n        hm2 = hm2+\" error: function () {\\r\\n\";\n           \n      hm2 = hm2+\"   }  })}\\r\\n\";\n\n       \n    hm2 = hm2+\" Handwriting.prototype.downEvent = function (e) {\\r\\n\";\n    hm2 = hm2+\" this.moveFlag = true;\\r\\n\";\n    hm2 = hm2+\" this.has = &#91;];\\r\\n\";\n    hm2 = hm2+\" this.history.push(&#91;]);\\r\\n\";\n    hm2 = hm2+\" this.upof = this.getXY(e);\\r\\n\";\n    hm2 = hm2+\" this.startOf = this.upof;\\r\\n\";\n    hm2 = hm2+\" }\\r\\n\";\n\n    \n    hm2 = hm2+\" Handwriting.prototype.moveEvent = function (e) \\r\\n\";\n    hm2 = hm2+\" { if (!this.moveFlag)\\r\\n\";\n    hm2 = hm2+\" return;\\r\\n\";\n    \n    hm2 = hm2+\"  e.preventDefault();\\r\\n\";\n    hm2 = hm2+\" var of = this.getXY(e);\\r\\n\";\n    hm2 = hm2+\" var up = this.upof;\\r\\n\";\n    hm2 = hm2+\" var ur = this.radius;\\r\\n\";\n    hm2 = hm2+\" this.has.unshift({time:new Date().getTime() ,dis:this.distance(up,of)});\\r\\n\";\n    hm2 = hm2+\" var dis = 0;\\r\\n\";\n    hm2 = hm2+\" var time = 0;\\r\\n\";\n    hm2 = hm2+\" for (var n = 0; n &lt; this.has.length-1; n++) {\\r\\n\";\n    hm2 = hm2+\" dis += this.has&#91;n].dis;\\r\\n\";\n    hm2 = hm2+\" time += this.has&#91;n].time-this.has&#91;n+1].time;\\r\\n\";\n    hm2 = hm2+\" if (dis>this.smoothness)\\r\\n\";\n    hm2 = hm2+\" break;}\\r\\n\";\n    hm2 = hm2+\" var or = Math.min(time\/dis*this.linePressure+this.lineMin , this.lineMax) \/ 2;\\r\\n\";\n    hm2 = hm2+\" this.radius = or;\\r\\n\";\n    \n    \n    hm2 = hm2+\" this.upof = of;\\r\\n\";\n    hm2 = hm2+\" if (dis&lt;7)\\r\\n\";\n    hm2 = hm2+\" return;\\r\\n\";\n    hm2 = hm2+\" if (this.startOf) {\\r\\n\";\n    hm2 = hm2+\" up = this.startOf;\\r\\n\";\n    hm2 = hm2+\"  ur = or;\\r\\n\";\n    hm2 = hm2+\" this.startOf = null;\\r\\n\";\n    hm2 = hm2+\"  }\\r\\n\";\n    hm2 = hm2+\" var len = Math.ceil(this.distance(up,of)\/2);\\r\\n\";\n    hm2 = hm2+\" for (var i = 0; i &lt; len; i++) \\r\\n\";\n    hm2 = hm2+\" {\\r\\n\";\n    hm2 = hm2+\" var x = up.x + (of.x-up.x)\/len*i;\\r\\n\";\n    hm2 = hm2+\" var y = up.y + (of.y-up.y)\/len*i;\\r\\n\";\n    \n    hm2 = hm2+\" x= Math.round(x);\\r\\n\";\n    hm2 = hm2+\" y= Math.round(y);\\r\\n\";\n    \n    hm2 = hm2+\" var x01= (of.x-up.x)\/len*i;\\r\\n\";\n    hm2 = hm2+\" var y01= (of.y-up.y)\/len*i;\\r\\n\";\n    \n    hm2 = hm2+\" var x1 = x01%m_cellWidht;\\r\\n\";\n    hm2 = hm2+\" var y1 = y01%m_cellWidht;\\r\\n\";\n    \n    hm2 = hm2+\" x= x- x1+5;\\r\\n\";\n    hm2 = hm2+\" y= y- y1+5;\\r\\n\";\n    \n    hm2 = hm2+\" var r = ur + (or-ur)\/len*i;\\r\\n\";\n    hm2 = hm2+\" this.ctx.beginPath();\\r\\n\";\n    hm2 = hm2+\" this.ctx.arc(x,y,r,0,2*Math.PI,true);\\r\\n\";\n    hm2 = hm2+\" this.ctx.fill();\\r\\n\";\n    hm2 = hm2+\" this.history&#91;this.history.length-1].push(x,y,r);\\r\\n\";\n    \n    hm2 = hm2+\" var x2 = x-x1;\\r\\n\";\n    hm2 = hm2+\" var y2 = y-y1;\\r\\n\";\n    \n    hm2 = hm2+\" var x3 = Math.round(x2\/m_cellWidht); \\r\\n\";\n    hm2 = hm2+\" var y3 = Math.round(y2\/m_cellWidht);\\r\\n\";\n    \n    hm2 = hm2+\" if(y3&lt;=32 &amp;&amp; x3&lt;=32 &amp;&amp; y3>=0 &amp;&amp; x3>=0)\\r\\n\";\n    hm2 = hm2+\" {\\r\\n\";\n    hm2 = hm2+\" m_inpdate&#91;y3]&#91;x3]=1;\\r\\n\";\n\n    hm2 = hm2+\" }}}\\r\\n\";\n    \n    hm2 = hm2+\" Handwriting.prototype.upEvent = function (e) {\\r\\n\";\n    hm2 = hm2+\" this.moveFlag = false;\\r\\n\";\n    hm2 = hm2+\" this.SaveDate();}\\r\\n\";\n    \n    hm2 = hm2+\" Handwriting.prototype.getXY = function (e) {\\r\\n\";\n    hm2 = hm2+\" var x = e.touches&#91;0].clientX;\\r\\n\";\n    hm2 = hm2+\" var y = e.touches&#91;0].clientY;\\r\\n\";\n    hm2 = hm2+\" return {\\r\\n\";\n    hm2 = hm2+\" x : x - this.canvas.offsetLeft + (document.body.scrollLeft || document.documentElement.scrollLeft),\\r\\n\";\n    hm2 = hm2+\" y : y - this.canvas.offsetTop  + (document.body.scrollTop || document.documentElement.scrollTop) }}\\r\\n\";\n    \n    hm2 = hm2+\" Handwriting.prototype.distance = function (a,b) {\\r\\n\";\n    hm2 = hm2+\" var x = b.x-a.x , y = b.y-a.y;\\r\\n\";\n    hm2 = hm2+\" return Math.sqrt(x*x+y*y);}\\r\\n\";\n    \n    hm2 = hm2+\" var hw = new Handwriting(\\\"canvasId\\\");\\r\\n\";\n    hm2 = hm2+\" hw.lineMax = 20;\\r\\n\";\n    hm2 = hm2+\" hw.lineMin = 20;\\r\\n\";\n    hm2 = hm2+\" hw.linePressure = 3.1;\\r\\n\";\n    hm2 = hm2+\" hw.smoothness = 100;\\r\\n\";\n    hm2 = hm2+\" &lt;\/script>\\r\\n\";\n\n    return hm2;\n}\n\nString DealWith(String strCommand)\n{\n\n\n    int npost1 = strCommand.indexOf(\"ShowLED\");\n    int npost2 = strCommand.indexOf(\"ShowString\");\n    int npost3 = strCommand.indexOf(\"=\");\n\n    String hm2 = strCommand.substring(npost3+1,256);\n    \n\n   if(npost2>=0 )\n    {\n       \n      Serial.println(hm2);\n     \n    }\n\n     else \n     {\n       Serial.println(hm2);\n       \/\/g_LEDData = \"00000000008FD10000FD500008CF6C0006D487008661E100CB787081CD1C28700E0D08100BE38600C7F1C10080E0F0008099B08308BF20C00C070870068F1E3003E9F6000030F1000850F3000C14B1000E0E060004070C000085081000E10060007000C100400003000000020000000000000000000000000000000000000000\";\/\/\n       \/\/hm2;\n       g_LEDData = hm2;\n       \/\/GetRpiServerIP();\n       ConvertLEDData(hm2);\n        showLEDData(4,32);\n\n      }\n\n\n  \n    return \"result&#91;fail]\\r\\n\";\n}\n\n\nvoid showLEDData(int nmaxRow,int nmaxCol)\/\/4,32\n{\n    if(g_LEDData == g_preLEDData)\n        return;\n        \n    ClearLcd(lc1,8);\n    ClearLcd(lc2,8);\n\n    \n    if(g_LEDData==\"\")\n    {\n        Serial.println(\"no data ==>\");\n        Serial.println(\"no data \u300a\u300a==\");\n      return;\n    }\n\n    for(int nCol =8; nCol&lt;24; nCol++)\n    {\n        int g4 = nCol%8;\n        for(int nRow=0;nRow&lt;MX_ROWS; nRow++)\n        {\n            int f3 =g_chrShowData&#91;nRow]&#91;nCol];\n            if(nCol>=16)\n              lc1.setRow(nRow,g_rowSetting&#91;g4],f3);\n            else\n              lc1.setRow(nRow+4,g_rowSetting&#91;g4],f3);\n        }\n    }\n\n    for(int nCol =24; nCol&lt;32; nCol++)\n    {\n        int g4 = nCol%8;\n        for(int nRow=0;nRow&lt;MX_ROWS; nRow++)\n        {\n            int f3 =g_chrShowData&#91;nRow]&#91;nCol];\n            lc2.setRow(nRow,g_rowSetting&#91;g4],f3);\n        }\n    }\n    g_preLEDData=g_LEDData;\n  \n}\n\n\nvoid printByte(int device, byte character &#91;])\n{\n    int i = 0;\n    for(i=0;i&lt;8;i++)\n    {\n        lc1.setRow(device,i,character&#91;i]);\n    }\n}\n\nvoid DisplayString(LedControl lc, String str1)\n{\n     for(int i=0;i&lt;str1.length();i++)\n     {\n\n        String a0= str1.substring(i,i+1);\n        \n        char b&#91;2];\n        \n        strcpy(b,a0.c_str());\n        \n        int f1 = b&#91;0];\n\n         for(int nrow=0; nrow&lt;8;nrow++)\n         {\n            lc.setRow(i, nrow ,CharAscii&#91;f1]&#91;nrow]);\n         }\n      }\n}\n\nvoid printChar(LedControl lc, int nLed, int nChar)\n{\n    for(int nrow=0; nrow&lt;8;nrow++)\n    {\n        lc.setRow(nLed, nrow ,CharAscii&#91;nChar]&#91;nrow]);\n    } \n}\n\nvoid printDot(LedControl lc, int nLed, int nChar)\n{\n    printChar(lc, nLed, 46);\n\n}\n\nvoid DisplayIPDuan(int nIPt,LedControl lc, int nled)\n{\n        int nt2 = nIPt%100;\n        int nt1 = nIPt - nt2;\n        int nt3 = nIPt % 10;\n\n         nt1= nt1\/100;\n         nt2= (nt2-nt3)\/10;\n        \n        printChar(lc, nled,   nt1+48);\n        printChar(lc, nled+1, nt2+48);\n        printChar(lc, nled+2, nt3+48);\n        printChar(lc, nled+3, 46);\n\n}\n\nvoid DisplayIP( )\n{\n\n    IPAddress ip;\n    ip = WiFi.localIP();\n\n    DisplayIPDuan(ip&#91;0],lc1, 0);\n    DisplayIPDuan(ip&#91;1],lc1, 4);\n    DisplayIPDuan(ip&#91;2],lc2, 0);\n    DisplayIPDuan(ip&#91;3],lc2, 4);\n\n  \n}\n\nvoid setup() \n{\n    SetupSerial();\n    SetupWifiScan();\n    ConnectMulitWif();\n    ClearLcd(lc1,8);\n    ClearLcd(lc2,8);\n\n    SetupWifiWebServer();\n    DisplayIP();\n}\n\nvoid loop()\n{\n\n\n  \/\/DisplayIP();\n   \/\/loopWebServer();\n\n \/\/ delay(1000);\n\n\n \/\/ printChar(lc1, 1, 65);\nlc1.setRow(0, 0, B01101000);\nlc1.setRow(0, 1, B10010100 );\nlc1.setRow(0, 2, B10000100 );\nlc1.setRow(0, 3, B01001000              );\nlc1.setRow(0, 4, B01001000  );\nlc1.setRow(0, 5, B01001000   );\nlc1.setRow(0, 6, B00110000);\nlc1.setRow(0, 7, B00110000);\n\n \n\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-748","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=748"}],"version-history":[{"count":1,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/748\/revisions"}],"predecessor-version":[{"id":749,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/748\/revisions\/749"}],"wp:attachment":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=748"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}