|
ABT主板(WIFI版)调试记录2今天把程序稍作了更改,这样就可以通过网页控制板子了,除了控制8266的指示灯外,还可以控制NANO的D13管脚。 主要代码如下: 8266程序: void loop() { // Check if a client hasconnected WiFiClient client =server.available(); if (!client) { return; }
// Wait until the client sendssome data Serial.println("newclient"); while(!client.available()){ delay(1); } // Read the first line of therequest String request =client.readStringUntil('\r'); Serial.println("getdata:"); Serial.println(request); client.flush(); // Match the request int value = LOW; if(request.indexOf("/LED=ON") != -1) { digitalWrite(ledPin, LOW); value = LOW; } if(request.indexOf("/LED=OFF") != -1){ digitalWrite(ledPin, HIGH); value = HIGH; } if(request.indexOf("/D13=ON") != -1) { Serial.println("ABTDW13,1#"); //串口向328P发数据(自定义协议) } if(request.indexOf("/D13=OFF") != -1){ Serial.println("ABTDW13,0#"); //串口向328P发数据(自定义协议) }
// Return the response client.println("HTTP/1.1200 OK"); client.println("Content-Type: text/html"); client.println("");// do not forget this one client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("Led pin isnow: ");
if(value == LOW) { client.print("On"); } else { client.print("Off"); } client.println("<br><br>"); client.println("Click <ahref=\"/LED=ON\">here</a> turn the LED on pin 2ON<br>"); client.println("Click <ahref=\"/LED=OFF\">here</a> turn the LED on pin 2OFF<br>"); client.println("Click <ahref=\"/D13=ON\">here</a> turn NANO on D13ON<br>"); client.println("Click <ahref=\"/D13=OFF\">here</a> turn NANO on D13OFF<br>"); client.println("</html>"); delay(1); Serial.println("Clientdisonnected"); Serial.println("");
} 328P程序(部分): 串口接收部分: while(Serial.available()>0) { a = (char)(Serial.read());//保存接收字符 if(a=='A'&&eFlag==0) { eFlag=1; } if(eFlag==1) { readcmd[rbytes++]=a; } if(rbytes==2) { if(readcmd[1]!='B') { eFlag=0; rbytes=0; readcmd[0]=0; }
} if(a=='#'&&readcmd[0]=='A')//完整帧 eFlag=2; if(rbytes==64) break; delay(1); } 解析命令部分代码: ctype= *p++;//命令类型:模拟量/数字量/传感器模块 cRW = *p++;//读写操作 for(j=0;j<2;j++) { for(i=0;i<3;i++) { if(*p==','||*p=='#') break; num[i]=*p;p++; } p++; param[j]=atoi(num); memset(num,0,3); }
if(ctype=='D')//模拟量读写(PWM) { if(cRW=='W') { sprintf(cmd,"digitalWrite(%d,%d);",param[0],param[1]); pinMode(param[0],OUTPUT); digitalWrite(param[0],param[1]); }else if(cRW=='R') { sprintf(cmd,"digitalRead(%d,%d);",param[0],param[1]); pinMode(param[0],INPUT); sprintf(sendcmd,"ABTDR%d,%d#",param[0],digitalRead(param[0])); ABTSendCMD(sendcmd);// } } 执行结果: 点亮8266指示灯;
熄灭8266指示灯;
点亮328P指示灯; 熄灭328P指示灯; |