Created
May 8, 2020 14:37
-
-
Save maxistar/0e00b138de72f84efd7815094e5c26fe to your computer and use it in GitHub Desktop.
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
/* | |
Simple script to send data to RequesBin | |
http://maxistar.ru/blog/%D0%9F%D0%BE%D1%81%D1%8B%D0%BB%D0%B0%D0%B5%D0%BC-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B2-%D0%BE%D0%B1%D0%BB%D0%B0%D0%BA%D0%BE/ | |
The original script was found at https://RandomNerdTutorials.com/esp32-sim800l-publish-data-to-cloud/ | |
Modified by Max Starikov | |
*/ | |
// Your GPRS credentials (leave empty, if not needed) | |
const char apn[] = "internet"; // APN (example: internet.vodafone.pt) use https://wiki.apnchanger.org | |
const char gprsUser[] = ""; // GPRS User | |
const char gprsPass[] = ""; // GPRS Password | |
// SIM card PIN (leave empty, if not defined) | |
const char simPIN[] = ""; | |
// Server details | |
// The server variable can be just a domain name or it can have a subdomain. It depends on the service you are using | |
const char server[] = "enx5hjar0vnp.x.pipedream.net"; // domain name: example.com, maker.ifttt.com, etc | |
const char resource[] = "/"; // resource path, for example: /post-data.php | |
const int port = 80; // server port number | |
// Keep this API Key value to be compatible with the PHP code provided in the project page. | |
// If you change the apiKeyValue value, the PHP file /post-data.php also needs to have the same key | |
String apiKeyValue = "tPmAT5Ab3j7F9"; | |
// TTGO T-Call pins | |
#define MODEM_RST 5 | |
#define MODEM_PWKEY 4 | |
#define MODEM_POWER_ON 23 | |
#define MODEM_TX 27 | |
#define MODEM_RX 26 | |
#define I2C_SDA 21 | |
#define I2C_SCL 22 | |
// BME280 pins | |
#define I2C_SDA_2 18 | |
#define I2C_SCL_2 19 | |
// Set serial for debug console (to Serial Monitor, default speed 115200) | |
#define SerialMon Serial | |
// Set serial for AT commands (to SIM800 module) | |
#define SerialAT Serial1 | |
// Configure TinyGSM library | |
#define TINY_GSM_MODEM_SIM800 // Modem is SIM800 | |
#define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb | |
// Define the serial console for debug prints, if needed | |
//#define DUMP_AT_COMMANDS | |
#include <Wire.h> | |
#include <TinyGsmClient.h> | |
#ifdef DUMP_AT_COMMANDS | |
#include <StreamDebugger.h> | |
StreamDebugger debugger(SerialAT, SerialMon); | |
TinyGsm modem(debugger); | |
#else | |
TinyGsm modem(SerialAT); | |
#endif | |
// include <Adafruit_Sensor.h> | |
// include <Adafruit_BME280.h> | |
// I2C for SIM800 (to keep it running when powered from battery) | |
TwoWire I2CPower = TwoWire(0); | |
// I2C for BME280 sensor | |
//TwoWire I2CBME = TwoWire(1); | |
//Adafruit_BME280 bme; | |
// TinyGSM Client for Internet connection | |
TinyGsmClient client(modem); | |
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */ | |
#define TIME_TO_SLEEP 36 /* Time ESP32 will go to sleep (in seconds) 3600 seconds = 1 hour */ | |
#define IP5306_ADDR 0x75 | |
#define IP5306_REG_SYS_CTL0 0x00 | |
bool setPowerBoostKeepOn(int en){ | |
I2CPower.beginTransmission(IP5306_ADDR); | |
I2CPower.write(IP5306_REG_SYS_CTL0); | |
if (en) { | |
I2CPower.write(0x37); // Set bit1: 1 enable 0 disable boost keep on | |
} else { | |
I2CPower.write(0x35); // 0x37 is default reg value | |
} | |
return I2CPower.endTransmission() == 0; | |
} | |
void setup() { | |
// Set serial monitor debugging window baud rate to 115200 | |
SerialMon.begin(115200); | |
// Start I2C communication | |
I2CPower.begin(I2C_SDA, I2C_SCL, 400000); | |
// I2CBME.begin(I2C_SDA_2, I2C_SCL_2, 400000); | |
// Keep power when running from battery | |
bool isOk = setPowerBoostKeepOn(1); | |
SerialMon.println(String("IP5306 KeepOn ") + (isOk ? "OK" : "FAIL")); | |
// Set modem reset, enable, power pins | |
pinMode(MODEM_PWKEY, OUTPUT); | |
pinMode(MODEM_RST, OUTPUT); | |
pinMode(MODEM_POWER_ON, OUTPUT); | |
digitalWrite(MODEM_PWKEY, LOW); | |
digitalWrite(MODEM_RST, HIGH); | |
digitalWrite(MODEM_POWER_ON, HIGH); | |
// Set GSM module baud rate and UART pins | |
SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX); | |
delay(3000); | |
// Restart SIM800 module, it takes quite some time | |
// To skip it, call init() instead of restart() | |
SerialMon.println("Initializing modem..."); | |
modem.restart(); | |
// use modem.init() if you don't need the complete restart | |
// Unlock your SIM card with a PIN if needed | |
if (strlen(simPIN) && modem.getSimStatus() != 3 ) { | |
modem.simUnlock(simPIN); | |
} | |
// Configure the wake up source as timer wake up | |
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); | |
} | |
void loop() { | |
SerialMon.print("Connecting to APN: "); | |
SerialMon.print(apn); | |
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) { | |
SerialMon.println(" fail"); | |
} | |
else { | |
SerialMon.println(" OK"); | |
SerialMon.print("Connecting to "); | |
SerialMon.print(server); | |
if (!client.connect(server, port)) { | |
SerialMon.println(" fail"); | |
} | |
else { | |
SerialMon.println(" OK"); | |
// Making an HTTP POST request | |
SerialMon.println("Performing HTTP POST request..."); | |
// Prepare your HTTP POST request data (Temperature in Celsius degrees) | |
String httpRequestData = "api_key=" + apiKeyValue + "&value1=1" | |
+ "&value2=dfdfd&value3=1" + ""; | |
// Prepare your HTTP POST request data (Temperature in Fahrenheit degrees) | |
//String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(1.8 * bme.readTemperature() + 32) | |
// + "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + ""; | |
// You can comment the httpRequestData variable above | |
// then, use the httpRequestData variable below (for testing purposes without the BME280 sensor) | |
//String httpRequestData = "api_key=tPmAT5Ab3j7F9&value1=24.75&value2=49.54&value3=1005.14"; | |
client.print(String("POST ") + resource + " HTTP/1.1\r\n"); | |
client.print(String("Host: ") + server + "\r\n"); | |
client.println("Connection: close"); | |
client.println("Content-Type: application/x-www-form-urlencoded"); | |
client.print("Content-Length: "); | |
client.println(httpRequestData.length()); | |
client.println(); | |
client.println(httpRequestData); | |
unsigned long timeout = millis(); | |
while (client.connected() && millis() - timeout < 10000L) { | |
// Print available data (HTTP response from server) | |
while (client.available()) { | |
char c = client.read(); | |
SerialMon.print(c); | |
timeout = millis(); | |
} | |
} | |
SerialMon.println(); | |
// Close client and disconnect | |
client.stop(); | |
SerialMon.println(F("Server disconnected")); | |
modem.gprsDisconnect(); | |
SerialMon.println(F("GPRS disconnected")); | |
} | |
} | |
// Put ESP32 into deep sleep mode (with timer wake up) | |
esp_deep_sleep_start(); | |
//sleep(3000); | |
} |
Hi, the BME280 lines are disabled because for my application I did not want to have BME280 sensor so this was done for purpose
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello MaxiStar,
I sow that you disabled all BME280 sensor lines. I'd like to now if you had some problems or is just a test. I use the same program with BME activated but i have a lot of trouble of instability.
Tank's for any comment