Created
September 23, 2015 06:38
-
-
Save crcastle/9dd9dcad86eee7e5b4a2 to your computer and use it in GitHub Desktop.
Using an Adafruit Huzzah ESP8266 with nRF24L01+ as a (one-way) internet gateway for several nRF24L01+ sensor nodes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SPI.h> | |
#include <RF24Network.h> | |
#include <RF24.h> | |
#include <ESP8266WiFi.h> | |
const char* ssid = "ssid"; | |
const char* password = "password"; | |
const char* host = "coolapp.herokuapp.com"; | |
// SPI pin configuration figured out from here: | |
// http://d.av.id.au/blog/esp8266-hardware-spi-hspi-general-info-and-pinout/ | |
RF24 radio(2, 15); // Set up nRF24L01 radio on SPI bus plus pins 2 & 15 | |
RF24Network network(radio); // Network uses that radio | |
// TODO: store this in EEPROM | |
const uint16_t this_node = 0; // Address of this node (the gateway node) | |
struct dataStruct{ | |
uint16_t _salt; // 2 bytes | |
uint16_t clientId; // 2 bytes | |
char location[4]; // 4 bytes | |
char room[4]; // 4 bytes | |
uint16_t sensorId; // 2 bytes | |
int16_t temp; // 2 bytes | |
uint16_t humidity; // 2 bytes | |
uint16_t volt; // 2 bytes | |
}sensor_data; | |
void setup() { | |
Serial.begin(115200); | |
// Serial.setDebugOutput(true); | |
connectToWifi(); | |
yield(); | |
Serial.println("starting......"); | |
restartRadio(); // turn on and configure radio | |
// TODO: remove debugging used to fix payload being too large | |
Serial.print("Size of salt: ");Serial.println(sizeof(sensor_data._salt)); | |
Serial.print("Size of clientId: ");Serial.println(sizeof(sensor_data.clientId)); | |
Serial.print("Size of location: ");Serial.println(sizeof(sensor_data.location)); | |
Serial.print("Size of room: ");Serial.println(sizeof(sensor_data.room)); | |
Serial.print("Size of sensorId: ");Serial.println(sizeof(sensor_data.sensorId)); | |
Serial.print("Size of temp: ");Serial.println(sizeof(sensor_data.temp)); | |
Serial.print("Size of humidity: ");Serial.println(sizeof(sensor_data.humidity)); | |
Serial.print("Size of volt: ");Serial.println(sizeof(sensor_data.volt)); | |
Serial.print("Size of struct: ");Serial.println(sizeof(sensor_data)); | |
Serial.println("Listening for sensor values..."); | |
} | |
void loop() { | |
network.update(); | |
while (network.available()) { | |
yield(); // give wifi functionality some time to do its operations | |
RF24NetworkHeader header; | |
//network.read(header, &sensor_data, radio.getDynamicPayloadSize()); | |
// explicitly set payload size | |
network.read(header,&sensor_data,sizeof(sensor_data)); | |
// TODO: remove debug | |
Serial.print("Got message: ");Serial.println(sizeof(sensor_data)); | |
Serial.print("_salt: ");Serial.println(sensor_data._salt); | |
Serial.print("volt: ");Serial.println(sensor_data.volt); | |
Serial.print("temp: ");Serial.println(sensor_data.temp); | |
Serial.print("humidity: ");Serial.println(sensor_data.humidity); | |
Serial.print("clientId: ");Serial.println(sensor_data.clientId); | |
Serial.print("location: ");Serial.println(sensor_data.location); | |
Serial.print("room: ");Serial.println(sensor_data.room); | |
Serial.print("sensorId: ");Serial.println(sensor_data.sensorId); | |
Serial.println("-----------"); | |
Serial.flush(); | |
delay(3000); | |
// Use WiFiClient class to create TCP connections | |
WiFiClient client; | |
const int httpPort = 80; | |
if (!client.connect(host, httpPort)) { | |
Serial.println("connection failed"); | |
return; | |
} | |
// We now create a URI for the request | |
char url[6] = "/data"; | |
char tempQueryString[500]; | |
sprintf(tempQueryString, "?message=%i/%s/%s/%i/temp_%i,%i/%s/%s/%i/humidity_%i,%i/%s/%s/%i/voltage_%i", sensor_data.clientId, | |
sensor_data.location, | |
sensor_data.room, | |
sensor_data.sensorId, | |
sensor_data.temp, | |
sensor_data.clientId, | |
sensor_data.location, | |
sensor_data.room, | |
sensor_data.sensorId, | |
sensor_data.humidity, | |
sensor_data.clientId, | |
sensor_data.location, | |
sensor_data.room, | |
sensor_data.sensorId, | |
sensor_data.volt); | |
Serial.print("Requesting URL: "); | |
Serial.print(url); | |
Serial.println(tempQueryString); | |
// This will send the request to the server | |
client.print(String("GET ") + url + tempQueryString + " HTTP/1.1\r\n" + | |
"Host: " + host + "\r\n" + | |
"Connection: close\r\n\r\n"); | |
// delay until we are likely to have received a response from the server. | |
// if there's been no response after this delay, the following while | |
// loop will be skipped. | |
delay(500); | |
// Read all the lines of the reply from server and print them to Serial | |
while(client.available()){ | |
String line = client.readStringUntil('\r'); | |
Serial.print(line); | |
} | |
Serial.println("==========="); | |
Serial.println(""); | |
} | |
} | |
void connectToWifi() { | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected"); | |
Serial.println("IP address: "); | |
Serial.println(WiFi.localIP()); | |
} | |
void restartRadio(){ | |
yield(); // give wifi functionality some time to do its operations | |
radio.begin(); // Start up the radio | |
network.begin(/*channel*/ 90, /*node address*/ this_node); | |
// radio.setPALevel(RF24_PA_HIGH); | |
// radio.setDataRate(RF24_250KBPS); | |
// radio.openReadingPipe(1, pipes[1]); | |
// radio.openWritingPipe(pipes[0]); | |
// radio.openReadingPipe(1,pipes[0]); | |
// radio.openWritingPipe(pipes[1]); | |
// radio.stopListening(); | |
network.update(); // always be pumping the network | |
} |
the code shows #include <avr/pgmspace.h> error. please help
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
the code shows error #include<avr/pgmspace.h> not available even after downloading the file and putting it up in library