1

I'm aware this question has probably been asked many times but I'm pulling my hair out.

I'm trying to get sensor data from an arduino to a MySQL server. I've checked the apache access log and the request is there. But it just isn't being inserted into the database. Manually adding the data using the browser works so the php code seems fine. I've allowed apache through the firewall and updated the permissions all to no avail. Code below:

Arduino Main Code:

#include "thingProperties.h"
#include <Arduino_MKRENV.h>
#include <WiFi.h>

WiFiClient client;

void setup() { // Initialize serial and wait for port to open: Serial.begin(9600); // This delay gives the chance to wait for a Serial Monitor without blocking if none is found delay(1500);

//Connect to WiFi network int status = WL_IDLE_STATUS; while (status != WL_CONNECTED){ Serial.print("Attempting to connect to SSID: "); Serial.println(SSID); status = WiFi.begin(SSID, PASS); delay(10000); } Serial.println("This is connected.");

if (!ENV.begin()) { Serial.println("Failed to initialize MKR ENV shield!"); while(1); } pinMode(2, INPUT); }

void loop() { relativeHumidity = int(ENV.readHumidity()); lightIntensity = (ENV.readIlluminance()); airPressure = int(ENV.readPressure(MILLIBAR)); temperature = int(ENV.readTemperature()); if(digitalRead(2) == LOW){ rain = 1; }else if(digitalRead(2) == HIGH){ rain = 0; } Serial.println("httpRequest"); httpRequest(); delay(10000); }

void httpRequest(){ // if there's a successful connection: if (client.connect(SERVER, 80)) { Serial.println("Connecting to server..."); // send the HTTP PUT request: client.print("GET /weather_data.php?temp="); Serial.println("GET /weather_data.php?); client.print(temperature); client.print("&pressure="); client.print(airPressure); client.print("&humidity="); client.print(relativeHumidity); client.print("&illumination="); client.print(lightIntensity); client.print("&rain="); client.print(rain); client.print(" "); client.println("HTTP/1.1"); client.print(" Host: "); client.println(SERVER); client.println(); Serial.println("Added."); } else { Serial.println("Not connected."); } if (client.connected()){ client.stop(); } }

thingProperties.h:

#include <WiFi.h>
#include <SPI.h>

const char THING_ID[] = "c942a18f-7696-4431-952c-76eaea3214ea";

const char SSID[] = SECRET_SSID; // Network SSID (name) const char PASS[] = SECRET_PASS; // Network password (use for WPA, or use as key for WEP) const char SERVER[] = SECRET_IP; // Server IP Address

int airPressure; float lightIntensity; float relativeHumidity; bool rain; float temperature;

2 Answers2

2

So I don't quite know why, but I started from scratch and it works now. I've put the new code below in case it helps someone in my situation.

// Arduino Low Power - Version: Latest 
//#include <ArduinoLowPower.h>
//#include <ArduinoIoTCloud.h>
#include "thingProperties.h"
#include <Arduino_MKRENV.h>
/*
  Repeating Wifi Web Client

This sketch connects to a a web server and makes a request using a WiFi equipped Arduino board.

created 23 April 2012 modified 31 May 2012 by Tom Igoe modified 13 Jan 2014 by Federico Vanzati

http://www.arduino.cc/en/Tutorial/WifiWebClientRepeating This code is in the public domain. */

#include <SPI.h> #include <WiFiNINA.h>

int status = WL_IDLE_STATUS;

// Initialize the Wifi client library WiFiClient client;

void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only }

// check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true); }

String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); }

// attempt to connect to Wifi network: while (status != WL_CONNECTED) { //Serial.print("Attempting to connect to SSID: "); //Serial.println(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);

} // you're connected now, so print out the status: //printWifiStatus(); //Start arduino cloud. //ArduinoCloud.begin(ArduinoIoTPreferredConnection); //Begin ENV shield. if (!ENV.begin()) { Serial.println("Failed to initialize MKR ENV shield!"); while (1); } }

void loop() { //ArduinoCloud.update(); // if there's incoming data from the net connection. // send it out the serial port. This is for debugging // purposes only: while (client.available()) { char c = client.read(); Serial.write(c); } //Serial.println("Start reading sensors."); relativeHumidity = int(ENV.readHumidity()); //Serial.println(relativeHumidity); lightIntensity = int(ENV.readIlluminance()); //Serial.println(lightIntensity); airPressure = int(ENV.readPressure(MILLIBAR)); //Serial.println(airPressure); temperature = int(ENV.readTemperature()); //Serial.println(temperature); UV_Index = int(ENV.readUVIndex()); //Serial.println(UV_Index); if (digitalRead(2) == LOW) { rain = 1; } else if (digitalRead(2) == HIGH) { rain = 0; } //Serial.println(rain); //Serial.println("Sensor data read."); //Serial.println("Start http request."); httpRequest(); //Serial.println("Stop http request"); delay(60000); }

// this method makes a HTTP connection to the server: void httpRequest() { // close any connection before send a new request. // This will free the socket on the Nina module client.stop();

// if there's a successful connection: if (client.connect(server, 80)) { //Serial.println("connecting..."); // send the HTTP PUT request: client.print("GET /weather_data.php?temp="); client.print(temperature); client.print("&pressure="); client.print(airPressure); client.print("&humidity="); client.print(relativeHumidity); client.print("&illumination="); client.print(lightIntensity); client.print("&UV_Index="); client.print(UV_Index); client.print("&rain="); client.print(rain); client.print(" "); client.println("HTTP/1.1"); client.println("Host: 192.168.0.29"); client.println("User-Agent: ArduinoWiFi/1.1"); client.println("Connection: close"); client.println(); } else { // if you couldn't make a connection: //Serial.println("connection failed"); } }

void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID());

// print your board'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"); }

0

WiFi.h is for Arduino WiFi shield. Use the WiFiNINA library for MKR1010

Juraj
  • 18,264
  • 4
  • 31
  • 49