想要請問一下各位大大
我想要透過透過lora的接收端上傳感測器的數據到ThingSpeak,但不知道要怎麼合併
再麻煩各位大大了
以下是ThingSpeak的程式碼
#include "ACS712.h"
// Code to use SoftwareSerial
#include <SoftwareSerial.h>
SoftwareSerial espSerial = SoftwareSerial(2,3); // arduino RX pin=2 arduino TX pin=3 connect the arduino RX pin to esp8266 module TX pin - connect the arduino TX pin to esp8266 module RX pin
ACS712 sensor(ACS712_30A, A1);
#include <DHT.h> //Attention: For new DHT11 version library you will need the Adafruit_Sensor library
#define DHTPIN 12 // Connect the signal pin of DHT11 sensor to digital pin 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int mq3 = 0;
const int AOUTpin=0;//the AOUT pin of the alcohol sensor goes into analog pin A0 of the arduino
const int DOUTpin=8;//the DOUT pin of the alcohol sensor goes into digital pin D8 of the arduino
const int ledPin=13;//the anode of the LED connects to digital pin D13 of the arduino
int limit;
int value;
String apiKey = "DVXLJUGQVUUKQXZN"; // replace with your channel's thingspeak WRITE API key
String ssid="Green-7730"; // Wifi network SSID
String password ="135791113"; // Wifi network password
boolean DEBUG=true;
//======================================================================== showResponce
void showResponse(int waitTime){
long t=millis();
char c;
while (t+waitTime>millis()){
if (espSerial.available()){
c=espSerial.read();
if (DEBUG) Serial.print(c);
}
}
}
//========================================================================
boolean thingSpeakWrite(float value1, float value2, float value3, float value4, float value5){
String cmd = "AT+CIPSTART=\"TCP\",\""; // TCP connection
cmd += "184.106.153.149"; // api.thingspeak.com
cmd += "\",80";
espSerial.println(cmd);
if (DEBUG) Serial.println(cmd);
if(espSerial.find((char*)"Error")){
if (DEBUG) Serial.println("AT+CIPSTART error");
return false;
}
String getStr = "GET /update?api_key="; // prepare GET string
getStr += apiKey;
getStr +="&field1=";
getStr += String(value1);
getStr +="&field2=";
getStr += String(value2);
getStr +="&field3=";
getStr += String(value3);
getStr +="&field4=";
getStr += String(value4);
getStr +="&field5=";
getStr += String(value5);
// getStr +="&field3=";
// getStr += String(value3);
// ...
getStr += "\r\n\r\n";
// send data length
cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
espSerial.println(cmd);
if (DEBUG) Serial.println(cmd);
delay(1000);
if(espSerial.find((char*)">")){
espSerial.print(getStr);
if (DEBUG) Serial.print(getStr);
}
else{
espSerial.println("AT+CIPCLOSE");
// alert user
if (DEBUG) Serial.println("AT+CIPCLOSE");
return false;
}
return true;
}
//================================================================================ setup
void setup() {
DEBUG=true; // enable debug serial
Serial.begin(9600);
pinMode(DOUTpin, INPUT);//sets the pin as an input to the arduino
pinMode(ledPin, OUTPUT);
sensor.calibrate();
dht.begin();
espSerial.begin(9600); // enable software serial
// Your esp8266 module's speed is probably at 115200.
// For this reason the first time set the speed to 115200 or to your esp8266 configured speed
// and upload. Then change to 9600 and upload again
//espSerial.println("AT+RST"); // Enable this line to reset the module;
//showResponse(1000);
//espSerial.println("AT+UART_CUR=9600,8,1,0,0"); // Enable this line to set esp8266 serial speed to 9600 bps
//showResponse(1000);
espSerial.println("AT+CWMODE=1"); // set esp8266 as client
showResponse(1000);
espSerial.println("AT+CWJAP=\""+ssid+"\",\""+password+"\""); // set your home router SSID and password
showResponse(5000);
if (DEBUG) Serial.println("Setup completed");
}
// ====================================================================== loop
void loop() {
value = analogRead(AOUTpin); //reads the analaog value from the alcohol sensor's AOUT pin
limit= digitalRead(DOUTpin);//reads the digital value from the alcohol sensor's DOUT pin
// Read sensor values
float I = sensor.getCurrentDC();
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
if (DEBUG) Serial.println("Failed to read from DHT");
}
else {
if (DEBUG) Serial.println("Temp="+String(t)+" *C");
if (DEBUG) Serial.println("Humidity="+String(h)+" %");
if (DEBUG) Serial.println(String("I = ") + I + " A");
// Write values to thingspeak
}
if (isnan(value) || isnan(limit)) {
if (DEBUG) Serial.println("Failed to read from Mq3");
}
else {
if (DEBUG) Serial.println("alcohol="+String(value));
if (DEBUG) Serial.println("lim="+String(limit));
thingSpeakWrite(value,limit,t,h,I); // Write values to thingspeak
}
delay(20000);
}
以下是Lora接收端的程式碼
#include <SPI.h>
#include <RH_RF95.h>
//When use LG01, uncomment this line, so print the result in Console.
//When use LoRa Mini Dev, Comment this link
//#define LG01_GATEWAY
#ifdef LG01_GATEWAY
#include <Console.h>
#include <Process.h>
#define BAUDRATE 115200
#define SerialPrint Console
#else
#define SerialPrint Serial
#endif
float frequency = 868.0;// Change the frequency here.
RH_RF95 rf95;
void setup()
{
#ifdef LG01_GATEWAY
Bridge.begin(BAUDRATE);
SerialPrint.begin();
#else
SerialPrint.begin(9600);
#endif
if (!rf95.init())
{
SerialPrint.println("LoRa module init failed, Please cehck hardware connection");
}
// Setup ISM frequency
rf95.setFrequency(frequency);
// Setup Power,dBm
rf95.setTxPower(13);
// Defaults BW Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on
SerialPrint.print("Listening on frequency: ");
SerialPrint.println(frequency);
}
void loop()
{
if (rf95.available())
{
// Should be a message for us now
char buf[RH_RF95_MAX_MESSAGE_LEN];
char len = sizeof(buf);
if (rf95.recv(buf, &len))
{
if(buf[0] == 1 & buf[1] == 1 & buf[2] ==1) //Get sensor data from node id 111
{
int newData[6] = {0, 0, 0, 0, 0, 0};
for (int i = 0; i < 4; i++)
{
newData[i] = buf[i +3];
}
int a = newData[0];
int b = newData[1];
int c = newData[2];
float d = newData[3];
SerialPrint.println("ID = 111 :");
SerialPrint.print("Current humdity = ");
SerialPrint.print(a);
SerialPrint.print("% ");
SerialPrint.print("temperature = ");
SerialPrint.print(b);
SerialPrint.println("C ");
SerialPrint.print("酒精值:");
SerialPrint.println(c);
SerialPrint.print("I=");
SerialPrint.print(d);
SerialPrint.println("A");
}
if(buf[0] == 1 & buf[1] == 1 & buf[2] == 2) //Get sensor data from node id 112
{
int newData[4] = {0, 0, 0, 0};
for (int i = 0; i < 2; i++)
{
newData[i] = buf[i + 3];
}
int a = newData[0];
int b = newData[1];
SerialPrint.print("ID = 112 :");
SerialPrint.print("Current humdity = ");
SerialPrint.print(a);
SerialPrint.print("% ");
SerialPrint.print("temperature = ");
SerialPrint.print(b);
SerialPrint.println("C ");
}
}
else
{
SerialPrint.println("recv failed");
}
}
} |