Polling JSON to change Lights state

Good Evening

Let me start with a little background. EE graduate of 20 years ago, which is to say I took C programming about 20 years ago but am a bit rusty to say the least. Even back then I was never really great at it. Capable of understanding it, but way rusty .

I'd like to do a project where I control some addressable LEDs based on a JSON file from the internet. I feel like most of these "lego" blocks already exist but I am having a little bit of a hard time getting it to all work together. As of right now I am using an Arduino R4 and have got it connected to a site and printing the JSON file to the serial port. I am honestly having a little bit of a hard time understanding how to get the JSON portion of it to work. I intend to use the ArduinoJSON library to filter the file down to about 14 case statements that control the lights.

To date I haven't really found an example that I could use to learn from. If someone has one maybe they could provide it? A simple example might be one that reads a value from a JSON and then changes state of the onboard light. From my code you can see I am looking at the information kept here: https://liftie.info/api/resort/sugarloaf

I'd like to control some lights based on the Lifts:Status group. I wanted to use the filtering available at the JSONArduino website but don't really know what to do. My next step would be to control the onboard light array based on the Lift Status. After that I would work on adding the addressable LEDS.

I am hoping someone is willing to help a wanna be programmer like myself out. Any and all help is appreciated.

Below is the current functioning code I have going right now

/*
  TLS WiFi Web client

  Remember to update the CA certificates using CertificateUploader sketch
  before using this sketch.

  Find the full UNO R4 WiFi Network documentation here:
  https://docs.arduino.cc/tutorials/uno-r4-wifi/wifi-examples#wi-fi-web-client-ssl
*/

#include "WiFiS3.h"
#include "WiFiSSLClient.h"
#include "IPAddress.h"

#include "arduino_secrets.h" 

///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = "M3000-E21C";        // your network SSID (name)
char pass[] = "abc7b172";        // your network password (use for WPA, or use as key for WEP)

int status = WL_IDLE_STATUS;
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "liftie.info";    // name address for Google (using DNS)

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
WiFiSSLClient 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.
    status = WiFi.begin(ssid, pass);
     
    // wait 10 seconds for connection:
    delay(10000);
  }
  
  printWifiStatus();
 
  Serial.println("\nStarting connection to server...");
  // if you get a connection, report back via serial:
  
  if (client.connect(server, 443)) {
    Serial.println("connected to server");
    // Make a HTTP request:
    client.println("GET /api/resort/sugarloaf HTTP/1.1");
    client.println("Host: liftie.info");
    client.println("Connection: close");
    client.println();
  }
}

/* just wrap the received data up to 80 columns in the serial print*/
/* -------------------------------------------------------------------------- */
void read_response() {
/* -------------------------------------------------------------------------- */  
  uint32_t received_data_num = 0;
  while (client.available()) {
    /* actual data reception */
    char c = client.read();
    /* print data to serial port */
    Serial.print(c);
    /* wrap data to 80 columns*/
    received_data_num++;
    if(received_data_num % 80 == 0) { 
      Serial.println();
    }
  }  
}

/* -------------------------------------------------------------------------- */
void loop() {
/* -------------------------------------------------------------------------- */  
  read_response();

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting from server.");
    client.stop();

    // do nothing forevermore:
    while (true);
  }
}

/* -------------------------------------------------------------------------- */
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");
}


Thanks

I had seen that one and understood it, The area I am getting most confused on is how to get the response from what I posted, into the JSON parser.
Would it be something like this?

 char json[] =
      "client.println("GET /api/resort/sugarloaf HTTP/1.1")";

or is it this?

 char json[] = client.read();

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.