-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create bbn_m5atomS3_lite_whatsapp.ino
- Loading branch information
Showing
1 changed file
with
139 additions
and
0 deletions.
There are no files selected for viewing
139 changes: 139 additions & 0 deletions
139
bbn_m5atomS3_lite_whatsapp/bbn_m5atomS3_lite_whatsapp.ino
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
|
||
#include <M5AtomS3.h> | ||
#include <Arduino.h> | ||
#include <SPI.h> | ||
#include <EthernetLarge.h> | ||
#include <SSLClient.h> | ||
#include <UrlEncode.h> | ||
#include "trust_anchors.h" | ||
|
||
#define SERVER "api.callmebot.com" | ||
|
||
#define SCK 5 | ||
#define MISO 7 | ||
#define MOSI 8 | ||
#define CS 6 | ||
|
||
// M5AtomLite | ||
//#define SCK 22 | ||
//#define MISO 23 | ||
//#define MOSI 33 | ||
//#define CS 19 | ||
|
||
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x99}; | ||
|
||
// Choose the analog pin to get semi-random data from for SSL | ||
// Pick a pin that's not connected or attached to a randomish voltage source | ||
const int rand_pin = 2; // 34 /* atom-lite */; | ||
|
||
// Initialize the SSL client library | ||
// We input an EthernetClient, our trust anchors, and the analog pin | ||
EthernetClient base_client; | ||
SSLClient client(base_client, TAs, (size_t)TAs_NUM, rand_pin); | ||
|
||
// Variables to measure the speed | ||
unsigned long beginMicros, endMicros; | ||
unsigned long byteCount = 0; | ||
bool printWebData = true; // set to false for better speed measurement | ||
|
||
void setup() { | ||
M5.begin(); | ||
Serial.begin(115200); | ||
|
||
Serial.println("Initializing SPI..."); | ||
SPI.begin(SCK, MISO, MOSI, -1); | ||
Serial.println("Initializing ethernet..."); | ||
Ethernet.init(CS); | ||
|
||
while (Ethernet.begin(mac) != 1) { | ||
Serial.println("Error getting IP address via DHCP, trying again..."); | ||
delay(2000); | ||
} | ||
|
||
// Check for Ethernet hardware present | ||
if (Ethernet.hardwareStatus() == EthernetNoHardware) { | ||
Serial.println( | ||
"Ethernet shield was not found. Sorry, can't run without " | ||
"hardware. :("); | ||
while (true) { | ||
delay(1); // do nothing, no point running without Ethernet hardware | ||
} | ||
} | ||
if (Ethernet.linkStatus() == LinkOFF) { | ||
Serial.println("Ethernet cable is not connected."); | ||
} | ||
Serial.print("Local IP : "); | ||
Serial.println(Ethernet.localIP()); | ||
Serial.print("Subnet Mask : "); | ||
Serial.println(Ethernet.subnetMask()); | ||
Serial.print("Gateway IP : "); | ||
Serial.println(Ethernet.gatewayIP()); | ||
Serial.print("DNS Server : "); | ||
Serial.println(Ethernet.dnsServerIP()); | ||
|
||
Serial.println("Ethernet Successfully Initialized"); | ||
// if you get a connection, report back via serial: | ||
} | ||
|
||
// +international_country_code + phone number | ||
// Portugal +351, example: +351912345678 | ||
String phoneNumber = "REPLACE_WITH_YOUR_PHONE_NUMBER"; // TODO: | ||
String apiKey = "REPLACE_WITH_API_KEY"; // TODO: | ||
|
||
String message = "Test from ESP32"; | ||
|
||
void loop() { | ||
M5.update(); | ||
|
||
if (M5.BtnA.wasPressed()) { | ||
if (client.connect(SERVER, 443)) { | ||
Serial.print("connected to "); | ||
// Make a HTTP request: | ||
client.println(String("GET ") + "/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message) + " HTTP/1.1"); | ||
client.println("Host: api.callmebot.com"); | ||
client.println("Connection: close"); | ||
client.println(); | ||
} else { | ||
// if you didn't get a connection to the server: | ||
Serial.println("connection failed"); | ||
} | ||
beginMicros = micros(); | ||
} | ||
|
||
if (client.connected()) { | ||
// if there are incoming bytes available | ||
// from the server, read them and print them: | ||
int len; | ||
while (len = client.available()) { | ||
if (len > 0) { | ||
byte buffer[80]; | ||
if (len > 80) len = 80; | ||
client.read(buffer, len); | ||
if (printWebData) { | ||
Serial.write(buffer, len); // show in the serial monitor (slows some boards) | ||
} | ||
byteCount = byteCount + len; | ||
} | ||
delay(1); | ||
} | ||
} | ||
|
||
// if the server's disconnected, stop the client: | ||
if (!client.connected() && byteCount > 0) { | ||
endMicros = micros(); | ||
Serial.println(); | ||
Serial.println("disconnecting."); | ||
//client.stop(); | ||
Serial.print("Received "); | ||
Serial.print(byteCount); | ||
Serial.print(" bytes in "); | ||
float seconds = (float)(endMicros - beginMicros) / 1000000.0; | ||
Serial.print(seconds, 4); | ||
float rate = (float)byteCount / seconds / 1000.0; | ||
Serial.print(", rate = "); | ||
Serial.print(rate); | ||
Serial.print(" kbytes/second"); | ||
Serial.println(); | ||
byteCount = 0; | ||
} | ||
} |