|
Arduino control [PROCE55 Modeler app file] You can then open it in the PROCE55 Modeler, change the IP address to match your network and immediately publish and import it to your phone using QR code (read the code using PROCE55 Mobile on your phone).
This is the Arduino sketch code used in the example: (you can remove the LCD and diode parts later, and only use the web server code for your projects) Arduino web server [.zip file] |
/*
PROCE55 HTTP Server Example
*/
#include <SPI.h>
#include <WiFi.h>
#include <LiquidCrystal.h>
char ssid[] = "SSID"; // your network SSID (name)
char pass[] = "SSIDPWD"; // your network password
// int keyIndex = 0; // your network key Index number (needed only for WEP)
IPAddress ip(192, 168, 0, 90); // static IP for WiFi shield if needed
int status = WL_IDLE_STATUS;
WiFiServer server(80); // Listen on tcp port 80
// initialize the library with the numbers of the interface pins
// LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd(4, 9, 5, 8, 3, 2); // 13 instead of 4 (4,7,10,11 and 12 used by Wifi Shield)
void setup() {
//Serial.begin(9600); // initialize serial communication - comment out for better perfomance
//while (!Serial) {
// wait serial port initialization
//}
//pinMode(10, OUTPUT); // HDG204 WiFi deactivate SD card pin 10, if necessary
//digitalWrite(10, HIGH);
// Turn of the LED by default
pinMode(6, OUTPUT);
digitalWrite(6, LOW);
//pinMode(LED_BUILTIN, OUTPUT);
//digitalWrite(LED_BUILTIN, LOW);
// Init the LCD 16x2
lcd.begin(16, 2);
lcd.clear();
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
//Serial.println("WiFi shield not present");
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F("Error: no wifi!"));
while (true); // don't continue
}
/*
if (WiFi.firmwareVersion() != "1.1.0") {
Serial.println(F("Please upgrade the WiFi Shield firmware!"));
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F("Firmware old!"));
}
*/
// attempt to connect to Wifi network:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Initializing..."));
lcd.setCursor(0, 1);
lcd.print(F("SSID:"));
lcd.setCursor(5, 1);
lcd.print(ssid);
// Comment the WiFi.config if static setup not needed, DHCP applies then
//WiFi.config(ip); // WiFi.config(ip, dns, gateway, subnet);
while (status != WL_CONNECTED) {
//Serial.print(F("Attempting to connect to WLAN SSID: "));
//Serial.println(ssid); // print the network name (SSID);
status = WiFi.begin(ssid, pass);
// wait 6 seconds for connection:
delay(6000);
}
server.begin(); // start the web server on port 80
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ready");
printWifiStatus();
}
void loop() {
WiFiClient client = server.available(); // listen for incoming clients
if (client) {
//Serial.print(F("Client connected"));
String req_str = "";
String currentLine = "";
int data_length = 0;
int data_read_length = 0;
boolean skip = true; // Skip first CRLF in request header
int response_length = 0; // HTTP response Content-Length
int resp_value = -1; // LED status
lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("Client")); lcd.setCursor(0, 1); lcd.print(F("connected"));
while (client.connected())
{
if (client.available()) {
char c = client.read();
//Serial.write(c);
if (data_length > data_read_length && !skip) {
// Read remaining request body data
req_str += c;
data_read_length++;
//Serial.println(data_read_length);
}
if (data_length <= data_read_length && !skip) { // c == '\n' &&
// Request read completed, send response
// find the request commands manually based on a substring
if (req_str.lastIndexOf("\"OFF\"") >= 0) {
digitalWrite(6, LOW);
resp_value = 0;
//Serial.println(F("\r\n===> Setting LED off..."));
}
else if (req_str.lastIndexOf("\"ON\"") >= 0) {
digitalWrite(6, HIGH);
resp_value = 1;
//Serial.println(F("\r\n===> Setting LED on..."));
}
else {
// GET
if (digitalRead(6) == 1) {
resp_value = 1; // HIGH
}
else {
resp_value = 0; // LOW
}
}
// Send the response
//Serial.println(F("===> Request read completed, sending response..."));
response_length = 56; // = 51 + 1 + 4;
client.write("HTTP/1.1 200 OK\r\n");
client.write("Content-Length: ");
client.print(response_length); // sizeof(resp)
client.write("\r\n");
client.write("Connection: close\r\n");
client.write("Access-Control-Allow-Origin: *\r\n");
client.write("Content-type: application/json; charset=utf-8\r\n");
client.write("\r\n");
client.write("{\"Parameters\":[{\"ParamName\":\"STATUS\",\"ParamValue\":\""); // 51 characters
client.print(resp_value); // 1 character
client.write("\"}]}"); // 4 characters
client.write("\r\n");
break;
}
else if (c == '\n' && currentLine.length() == 0 && skip) {
// Start of the request body after this line
//Serial.println(F("===> Start of the request body."));
skip = false;
}
else if (c == '\n' && currentLine.length() > 15 && currentLine.startsWith(F("Content-Length:")) && skip) {
//skip = false;
//String temp = currentLine.substring(15);
//temp.trim();
//Serial.print(F("===> Content length detected: "));
//data_length = temp.toInt();
data_length = currentLine.substring(15).toInt();
//Serial.println("Content-length: ");
//Serial.println(data_length);
}
if (c == '\n') {
// new line
currentLine = "";
} else if (c != '\r') {
// add current character to the current line
currentLine += c;
}
} // if data available
} // client still connected
// give the client time to receive the data
delay(50);
// close the connection:
client.stop();
//Serial.println(F("===> Client disconnected."));
printWifiStatus();
}
}
/*
POST / HTTP/1.1
Content-Length: 328
Content-Type: application/json
{"FunctionName":"TEST","Status":"","StatusText":"","TextEncoding":"","SecurityToken":"",
"Parameters":[{"ParamName":"function_name","ParamValue":"TEST"},
{"ParamName":"requestencoding","ParamValue":"UTF-8"},{"ParamName":"responseencoding","ParamValue":"UTF-8"},
{"ParamName":"PARAM1","ParamValue":"Test passed!"}],"TableValues":[]}
*/
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print(F("SSID: "));
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print(F("IP Address: "));
Serial.println(ip);
// Status to LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(WiFi.SSID());
lcd.setCursor(0, 1);
lcd.print(IpAddress2String(ip));
// print the received signal strength:
Serial.print(F("Signal strength (RSSI):"));
Serial.print(WiFi.RSSI());
Serial.println(F(" dBm"));
// print where to go in a browser:
Serial.print(F("Send your HTTP requests to http://"));
Serial.println(ip);
return;
}
String IpAddress2String(const IPAddress& ipAddress)
{
return String(ipAddress[0]) + String(".") +\
String(ipAddress[1]) + String(".") +\
String(ipAddress[2]) + String(".") +\
String(ipAddress[3]) ;
}
|
| |
|
PROCE55® is based on the experience which East Gate® acquired in challenging process automation and system integration projects in large manufacturing industries
across the Western and Eastern Europe.
Using PROCE55® you can achieve quick wins and real improvement of process performance in context of complex mission-critical processes.
|