Как отправлять изображения с ESP32 CAM на IoT Core?

#google-cloud-platform #iot #esp32

#google-облачная платформа #iot #esp32

Вопрос:

Мне нужно, чтобы система была безопасной.

Я устал кодировать изображение с помощью base64 и отправлять строку через MQTT в ядро Интернета вещей. Затем расшифруйте строку с помощью облачной функции и, наконец, сохраните декодированное изображение в облачном хранилище Google. Проблема заключается в ограниченном размере сообщения в MQTT.

Использование облачной функции, а затем хранение в облачном хранилище Google небезопасно, любой может нажать на этот URL, и я потеряю контроль над всей связью ESP32CAM.

Я что-то упускаю из виду? существует ли действительно безопасный способ отправки файлов в облачное хранилище Google из ядра Интернета вещей?

Спасибо

Ответ №1:

IoT Core не следует использовать для передачи больших больших двоичных объектов.

Тем не менее, вы можете воспользоваться преимуществами безопасного соединения между IoT Core и устройством для отправки учетных данных на устройство для безопасного доступа к GCS.

Создайте учетную запись службы с доступом только на запись к вашей корзине GCS. Передайте ключ для этой учетной записи службы на устройство через IoT Core (например, через изменение конфигурации) Затем устройство может использовать этот ключ для безопасного подключения к GCS и загрузки изображения.

В зависимости от ваших предпочтений и конкретного варианта использования вы можете поворачивать клавиши для доступа к GCS, когда захотите, или использовать разрешения настолько подробно, насколько захотите (одна клавиша для всех устройств, одна клавиша для каждого устройства, …)

Ответ №2:

Способ, которым я это сделал, состоит в том, чтобы разбить изображение на 256 Тыс. пакетов (ну, 255 тыс. с заголовком в 8 байт, который представляет собой int, который представляет порядок, в котором он должен быть повторно собран на другом конце, поскольку Pub / Sub не гарантирует упорядочение).).

ответ @ rbarbero — еще один хороший ответ, в котором вы отправляете учетные записи, чтобы напрямую общаться с GCS.

Другой способ сделать это — заставить устройство взаимодействовать с чем-то локальным, более мощным, у которого есть учетные данные этой службы непосредственно в GCS, и просто полностью обойти IoT Core.

Ответ №3:

Нет необходимости кодировать его в base64, а размер буфера pubsub MQTT можно изменять.

Я использую:

 #include <PubSubClient.h>
...
void setup() {
...
  boolean res = mqttClient.setBufferSize(50*1024); // ok for 640*480
  if (res) Serial.println("Buffer resized."); else Serial.println("Buffer resizing failed");
...
}

void sendPic() {
...
      if (fb->len) // send only images with size >0
        if (mqttClient.beginPublish("test_loc/esp32-cam/pic_ms", fb->len   sizeof(long), false))
        {
          // send image data   millis()
          unsigned long m = millis();  
          int noBytes;
          noBytes = mqttClient.write(fb->buf, fb->len);
          noBytes = mqttClient.write((byte *) amp;m, sizeof(long));
          if (!mqttClient.endPublish())
          {
            // error!
            Serial.println("nError sending data.");
          }
        }
...
}
  

Здесь я отправляю изображение размером 640 * 480 и добавляю текущее значение millis () в конце, чтобы сшить его обратно в видео через ffmpeg.