Skip to content

Instantly share code, notes, and snippets.

@turnipsoup
Last active July 23, 2020 18:06
Show Gist options
  • Save turnipsoup/9ab4ab3e3643913f15df1b60e9942d53 to your computer and use it in GitHub Desktop.
Save turnipsoup/9ab4ab3e3643913f15df1b60e9942d53 to your computer and use it in GitHub Desktop.
Read from analog pin and generate HTTP POST message with data on an Arduino Nano 33 IOT
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"\n",
"%matplotlib inline\n",
"\n",
"df = pd.read_csv(\"data/light_data.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date</th>\n",
" <th>raw_data</th>\n",
" <th>voltage_data</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2020-05-16 20:23:19.823027</td>\n",
" <td>441</td>\n",
" <td>1.42</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2020-05-16 20:23:21.900602</td>\n",
" <td>445</td>\n",
" <td>1.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2020-05-16 20:23:24.000820</td>\n",
" <td>440</td>\n",
" <td>1.42</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2020-05-16 20:23:26.068007</td>\n",
" <td>440</td>\n",
" <td>1.42</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2020-05-16 20:23:28.153403</td>\n",
" <td>441</td>\n",
" <td>1.42</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" date raw_data voltage_data\n",
"0 2020-05-16 20:23:19.823027 441 1.42\n",
"1 2020-05-16 20:23:21.900602 445 1.44\n",
"2 2020-05-16 20:23:24.000820 440 1.42\n",
"3 2020-05-16 20:23:26.068007 440 1.42\n",
"4 2020-05-16 20:23:28.153403 441 1.42"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Above we have collected data from my Arduino based light sensor that I made. I set it up in my bedroom window before bed to try to catch the sunrise."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x126f17510>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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TtrTpTHCZlYATAMWtdo0HNgW8riItsmyiIiISI+58O53vQ5BYlzEibCZZQHPAD93zpUfzJOZ2RVmttjMFu/du/dgDiEiIiISkY17q7wOQWJcRImwmaXiT4Ifcc49206T7cDIkMcjAnUtOOfudc5Nd85Nz8/PP5h4RURERLrkzKM0PljaF8msEQb8HVjjnLujg2YvApcFZo84AShzzu2MYpwiIiIiEatv9AXL118w0cNIJJZFMmvEycA3gBVmtixQdzUwCsA5dw8wDzgPKASqgW9FP1QRERGRyDyyaEuwbOZhIBLTwibCzrmFQKeXkHPOAT+OVlAiIiIih+LGlw7M8pqWovXDpH26MkRERKTXOv3IfAZlZ3gdhsQoJcIiIiLSq3y0uTRYvnbWUR5GIrFOibCIiIj0Kl++5/1g+fBBWlpZOqZEWERERHqlsycM9joEiXFKhEVERKTX2FJyYBGNv379WA8jkXigRFhERER6jf95fX2wnJykedOkc0qERUREpNd49mP/wrYL/+sMjyOReKBEWERERHqdYbmZXocgcUCJsIiIiPQKK4rKguUkDYuQCCgRFhERkV7h7ws3eh2CxBklwiIiItIrlFTVA/DLs47wOBKJF0qERUREpFd4Z30xAP/xuXEeRyLxQomwiIiIiCQkJcIiIiIS99bvrvA6BIlDSoRFREQk7p31pwVehyBxSImwiIiI9BrjBmV5HYLEESXCIiIiEtd2l9cGy69deZqHkUi8USIsIiIica15tgiRrlIiLCIiInFt/qpd/u8/P9XjSCTeKBEWERGRuPba6t0AHDkk2+NIJN4oERYRERGRhKREWEREROJW0b5qr0OQOKZEWEREROLWjN+/BcBPzjjc40gkHikRFhERkbj3hWOGex2CxCElwiIiIhKX9lXVB8tj8rWQhnSdEmERERGJS2fe8bbXIUicUyIsIiIicakk0CP8+pWaP1gOjhJhERERiWtjNSxCDpISYREREYk7odOmmZmHkUg8UyIsIiIiceeyv38IwKzJQz2OROKZEmERERGJOxuLqwCYOiLP40gknikRFhERkbgzNr8vAN+eMdrjSCSehU2Ezex+M9tjZis72H66mZWZ2bLA13XRD1NERETkgA17q5g2Ko/kJI0PloOXEkGbB4C7gIc6afOOc+78qEQkIiIi0onSwLRpowf29TgSiXdh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\n",
"text/plain": [
"<Figure size 864x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df['voltage_data'].plot.line(figsize=(12,5), title=\"Voltage_data\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The jumps at the start are where I turned on my light during the evening having forgotten about my setup."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The raw output data is collected from a basic setup: 3.3v from the arduino is passed through a photoresistor and a regular resistor. The values presented to the Arduino analog input pin come between 0-1023, with 1023 being full resistance. The volatage data is calulcated from the raw data with this equation:\n",
"\n",
"`sensorValue * (3.3 / 1023.0)`\n",
"\n",
"Since we are passing 3.3v through the circuit, we need to divide that by the value returned to the analog pin in order to determine the total voltages of the output."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looking at the data, and disregarding streelights, we can see that the sun rises to the point of illuminating the photoresistor fairly quickly. It then appears to have a slower climb up to fill \"power\". It should be noted that it was both a cloudy evening and a cloudy morning."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"My next step is to attach a thermistor to the Arduino to collect both light levels and temperature values from given areas of my home."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
/*
Will take the reading on analog pin 0 and pass the data
via HTTP POST method to a server expecting it (Flask
on a Pi)
Original by Tom Igoe
*/
#include <ArduinoHttpClient.h>
#include <WiFiNINA.h>
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
/////// Wifi Settings ///////
char ssid[] = YOUR_SSID;
char pass[] = YOUR_WIFI_PASSWORD;
char serverAddress[] = "192.168.1.18"; // server address
int port = 5000;
WiFiClient wifi;
HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS;
void setup() {
//Initialize serial and wait for port to open:
//Serial.begin(9600);
// 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();
}
void loop() {
postRequest();
delay(1000);
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("==========");
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");
Serial.print("==========");
Serial.print("");
}
void postRequest() {
// Here we read the data from pin 0
int sensorValue = analogRead(A0);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 3.3V):
float voltage = sensorValue * (3.3 / 1023.0);
// print out the value you read:
//Serial.println(voltage);
// Here we make the actual post request
//Serial.println("Making POST request");
String contentType = "application/x-www-form-urlencoded";
String postData = "raw=" + String(sensorValue) + "&voltage=" + String(voltage);
client.post("/", contentType, postData);
// read the status code and body of the response
int statusCode = client.responseStatusCode();
String response = client.responseBody();
//Serial.print("Status code: ");
//Serial.println(statusCode);
//Serial.print("Response: ");
//Serial.println(response);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment