2

I've been doing a personal project.
The idea of the bigger project is to feed my fish using a robot.
My specific problem is that I would like to see some data from the various sensors that I will be adding. But at the moment I am wanting to be able to use serial communication between my 2 boards to transfer an integer from my Mega board to my MKR1000 board, and then for my MKR1000 to connect to the WIFI where I can see the information on my phone from the IP address.

Below is the 2 pieces of code, first being for the Mega board, where intergers are turned into strings and then sent the Mrk1000.
The sencond piece of code is for the MKR1000. Main goal is to recieve the data from the Mega board and then diaplayed on the client (over WIFI).

FOR MEGA BAORD ------------------------------------------------------------------------------------------

            char str[4];
            char str1[4];
            char str2[4];
            char str3[4];
            char str4[4];
            
            void setup() {
              Serial.begin(9600);
            }
            
            void loop() {
              int value= 500; //this would be much more exciting if it was a sensor value
              int value1= 400;
              int value2= 300;
              int value3= 200;
              int value4= 100;
              
              itoa(value, str, 10); //Turn value into a character array
              itoa(value1, str1, 10);
              itoa(value2, str2, 10);
              itoa(value3, str3, 10);
              itoa(value4, str4, 10);
              Serial.write(str, 4);
              delay(10);
                Serial.write(str1, 4);
                delay(10);
                  Serial.write(str2, 4);
                  delay(10);
                    Serial.write(str3, 4);
                    delay(10);
                      Serial.write(str4, 4);
                      delay(10);
            
            }

FOR MRK1000 -----------------------------------------------------------------------------------------

            #include <SPI.h>
            #include <WiFi101.h>
            #include <stdio.h>
            #include <math.h>
            
            //#include "arduino_secrets.h"
            ///////please enter your sensitive data in the Secret tab/arduino_secrets.h
            char ssid[] = "";//SECRET_SSID;        // your network SSID (name)
            char pass[] ="";// SECRET_PASS;    // your network password (use for WPA, 
            or use as key for WEP)
            int keyIndex = 0;                 // your network key Index number (needed only for WEP)
            
            char str[4];
            char str1[4];
            
            int status = WL_IDLE_STATUS;
            WiFiServer server(80);
            
            void setup() {
              Serial.begin(9600);      // initialize serial communication
              pinMode(6, OUTPUT);      // set the LED pin mode
              Serial1.begin(9600);
            
              // check for the presence of the shield:
              if (WiFi.status() == WL_NO_SHIELD) {
                Serial.println("WiFi shield not present");
                while (true);       // don't continue
              }
            
              // attempt to connect to WiFi network:
              while ( status != WL_CONNECTED) {
                Serial.print("Attempting to connect to Network named: ");
                Serial.println(ssid);                   // print the network name (SSID);
            
                // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
                status = WiFi.begin(ssid, pass);
                // wait 10 seconds for connection:
                delay(10000);
              }
              server.begin();                           // start the web server on port 80
            printWiFiStatus();                        // you're connected now, so print out the status
            }
            
            int x = 0;       int i = 0;
            void loop() {
              WiFiClient client = server.available();   // listen for incoming clients
                
              if (client) {                             // if you get a client,
                Serial.println("new client");           // print a message out the serial port
                String currentLine = "";                // make a String to hold incoming data from the client
                while (client.connected()) {            // loop while the client's connected
                  if (client.available()) {             // if there's bytes to read from the client,
                    char c = client.read();             // read a byte, then
                    Serial.write(c);                    // print it out the serial monitor
                    if (c == '\n') {                    // if the byte is a newline character
            
                        if (Serial1.available()) {
                            delay(100); //allows all serial sent to be received together
                            while(Serial1.available() && i<4) {
                              str[i++] = Serial1.read();
                            }
                          str[i++]='\0';
                        }
            
                      // if the current line is blank, you got two newline characters in a row.
                      // that's the end of the client HTTP request, so send a response:
                      if (currentLine.length() == 0) {
                        // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
                        // and a content-type so the client knows what's coming, then a blank line:
                        client.println("HTTP/1.1 200 OK");
                        client.println("Content-type:text/html");
                       
                              //strcpy(str, "98993489");
                          int val = atoi(str);
                            //Serial.println(str,4);
                            client.print("str = ");
                            client.print(x);
                        
            
                        
                        client.println();
                        client.print(x); 
                         client.println("<br>");
            
                        // the content of the HTTP response follows the header:
                        client.print("Click <a href=\"/H\">here</a> turn the LED on pin 9 on<br>");
                        client.print("Click <a href=\"/L\">here</a> turn the LED on pin 9 off<br>");
            
            
                        // The HTTP response ends with another blank line:
                        client.println();
                        // break out of the while loop:
                        break;
                      }
                      else {      // if you got a newline, then clear currentLine:
                        currentLine = "";
                      }
                    }
                    else if (c != '\r') {    // if you got anything else but a carriage return character,
                      currentLine += c;      // add it to the end of the currentLine
                    }
            
                    // Check to see if the client request was "GET /H" or "GET /L":
                    if (currentLine.endsWith("GET /H")) {
                      Serial.println("high"); 
                      digitalWrite(9, HIGH);               // GET /H turns the LED on
                             
                      }
                    if (currentLine.endsWith("GET /L")) {
                      Serial.println("low"); 
                      digitalWrite(9, LOW);                // GET /L turns the LED off
                       
                    }
                  }
                }
                // close the connection:
                client.stop();
                Serial.println("client disonnected");
                x++;
              }
            }
            
            void printWiFiStatus() {
              // print the SSID of the network you're attached to:
              Serial.print("SSID: ");
              Serial.println(WiFi.SSID());
            
              // print your WiFi shield's IP address:
              IPAddress ip = WiFi.localIP();
              Serial.print("IP Address: ");
              Serial.println(ip);
            
              // print the received signal strength:
              long rssi = WiFi.RSSI();
              Serial.print("signal strength (RSSI):");
              Serial.print(rssi);
              Serial.println(" dBm");
              // print where to go in a browser:
              Serial.print("To see this page in action, open a browser to http://");
              Serial.println(ip);
            }
4
  • And where exactly is your problem? With displaying over Wifi (on a Website hosted on the MRK?)? Or with the Serial communication? – chrisl Apr 12 at 10:45
  • with trying to display over wifi. – sam courtney Apr 12 at 10:51
  • 1
    You're going about your sending all wrong. You don't need to convert anything. Just use Serial.println(val1); etc, then read your serial up until the terminating \n. – Majenko Apr 12 at 10:56
  • 3 MCU for this? ATmega2560, SAMD21 and ESP32? – Juraj Apr 12 at 12:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.