-
Notifications
You must be signed in to change notification settings - Fork 315
/
PhotoFromSD.ino
130 lines (111 loc) · 3.21 KB
/
PhotoFromSD.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*******************************************************************
* An example of bot that echos back any messages received *
* *
* written by Giacarlo Bacchio (Gianbacchio on Github) *
* adapted by Brian Lough *
*******************************************************************/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#include <SPI.h>
#include <SD.h>
// Wifi network station credentials
#define WIFI_SSID "YOUR_SSID"
#define WIFI_PASSWORD "YOUR_PASSWORD"
// Telegram BOT Token (Get from Botfather)
#define BOT_TOKEN "XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
const unsigned long BOT_MTBS = 1000; // mean time between scan messages
unsigned long bot_lasttime; // last time messages' scan has been done
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
File myFile;
bool isMoreDataAvailable();
byte getNextByte();
bool isMoreDataAvailable()
{
return myFile.available();
}
byte getNextByte()
{
return myFile.read();
}
void handleNewMessages(int numNewMessages)
{
String chat_id = bot.messages[0].chat_id;
String file_name = "box.jpg";
myFile = SD.open(file_name);
if (myFile)
{
Serial.print(file_name);
Serial.print("....");
//Content type for PNG image/png
String sent = bot.sendPhotoByBinary(chat_id, "image/jpeg", myFile.size(),
isMoreDataAvailable,
getNextByte, nullptr, nullptr);
if (sent)
{
Serial.println("was successfully sent");
}
else
{
Serial.println("was not sent");
}
myFile.close();
}
else
{
// if the file didn't open, print an error:
Serial.println("error opening photo");
}
}
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.print("Initializing SD card....");
if (!SD.begin(D0))
{
Serial.println("failed!");
return;
}
Serial.println("done.");
// attempt to connect to Wifi network:
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
Serial.print("Connecting to Wifi SSID ");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP());
// Check NTP/Time, usually it is instantaneous and you can delete the code below.
Serial.print("Retrieving time: ");
time_t now = time(nullptr);
while (now < 24 * 3600)
{
Serial.print(".");
delay(100);
now = time(nullptr);
}
Serial.println(now);
}
void loop()
{
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis();
}
}