Цифровая электроника для начинающих (Елисеев) - страница 50



Нажимаем кнопку “Generate” рядом с “access token”, и получаем ключ вида V3z9NpYlRxEAAAAAAACG5cjBXXXXXXXXXXXXXX, его надо сохранить, мы будем использовать его в дальнейшем.


На этом подготовительная часть закончена. Сам сервис Dropbox имеет разнообразное API для работы с данными, посмотреть список функций можно по адресу https://www.dropbox.com/developers/documentation/http/documentation. Нам для отправки файлов нужна будет всего лишь одна функция upload.


Для того, чтобы отличать файлы друг от друга, мы будем создавать файлы по шаблону “год-месяц-день-чч-мм-сс.txt”. Dropbox требует защищенного соединения по https, поэтому мы используем класс WiFiClientSecure.


Код программы целиком приведен ниже.


#include

#include

#include


const char* ssid = "TP-LINK_AB11";

const char* password = "12345678";

WiFiClientSecure client;


void uploadData(String content) {

Serial.println("Dropbox connecting...");

if (client.connect("content.dropboxapi.com", 443)) {

Serial.println("Dropbox connected");


// Сформировать имя файла по шаблону времени

time_t now = time(nullptr);

struct tm timeinfo;

gmtime_r(&now, &timeinfo);

char file_name[64] = {0};

strftime(file_name, 64, "log-%Y-%m-%d-%H-%M-%S.txt", &timeinfo);

Serial.print("Upload "); Serial.println(file_name);


// Отправка запроса

client.println("POST /2/files/upload HTTP/1.1");

client.println("Host: content.dropboxapi.com");

client.println("Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXX");

char dropbox_args[255] = {0};

sprintf(dropbox_args,

"{\"path\": \"/%s\", \"mode\": \"overwrite\", \"autorename\": true, \"mute\": false}", file_name);

client.print("Dropbox-API-Arg: "); client.println(dropbox_args);

client.println("Content-Type: application/octet-stream");

client.print("Content-Length: "); client.println(content.length());

client.println();

client.println(content);

delay(5000);

client.stop();

Serial.println("Disconnect");

Serial.println();

} else {

Serial.println("Error: cannot connect");

Serial.println();

}

}


void setup() {

Serial.begin(115200);

delay(10);

Serial.print("Connecting to "); Serial.println(ssid);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

WiFi.begin(ssid, password);

Serial.print(".");

}

Serial.println("");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());