2020年2月6日 星期四

Arduino Yun 配合 C# Dropbox 的應用 - 上傳檔案篇


本來是想直接在 Arduino Yun 上安裝dropbox 的API 上傳Webcam 拍到的照片, 可是怎麼安裝就是裝不起來, 所以就用另一個方式:系統架構為
由arduino Yun 接上 PIR 感測器 偵測到物體經過 就用 webcam 拍照 然後由上機介面把存在Yun的SD card的照片抓回本機上傳到 dropbox!!
感謝從網路參考的這篇文章仙草奶綠的程式筆記本, 了解 Dropbox API 的使用方式
Yun 上的code主要是 PIR的 input pin 偵測事件
判斷有物體後 下拍照指令
p.runShellCommand("fswebcam /mnt/sda1/test.png");


上機介面用 c#所寫用到的dll有
using Renci.SshNet;
using Dropbox.Api;

抓取 Yun SD Card上的圖片
string remoteDirectory = "/mnt/sda1";
using (var sftp = new SftpClient(yun._host, yun._username, yun._password))
{
      sftp.Connect();
      var files = sftp.ListDirectory(remoteDirectory);
       using (Stream fileStream = File.Create(@"D:\temp\test.png"))
      {
           sftp.DownloadFile("/mnt/sda1/test.png", fileStream);
       }
}

上傳到 Dropbox 用到的API 為
var task = Task.Run((Func)UploadDoc);
task.Wait();

public async Task UploadDoc()
{
    string uploadname = "yun.jpg";
    using (var dbx = new DropboxClient(this.AccessToken))
    {
         var full = await dbx.Users.GetCurrentAccountAsync();
         await Upload(dbx, "/software", "test1.txt", @"D:\Test\test.txt");
    }
}
private async Task Upload(DropboxClient dbx, string folder, string file, string fileToUpload)
{
     using (var mem = new MemoryStream(File.ReadAllBytes(fileToUpload)))
     {
            var updated = await dbx.Files.UploadAsync(
                folder + "/" + file,
                Dropbox.Api.Files.WriteMode.Overwrite.Instance,
                body: mem);
            Console.WriteLine("Saved {0}/{1} rev {2}", folder, file, updated.Rev);
     }
}

這樣就完成初步的照片上傳了!! 後續可以做一些 IoT 的應用.





沒有留言:

張貼留言