色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduino藍(lán)牙攝像頭(ABC)

Arduino藍(lán)牙攝像頭(ABC)

2022-10-18 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

今天,你幾乎不會(huì)讓任何人感到驚訝,因?yàn)槟愕?a target='_blank' class='arckwlink_none'>手機(jī)配備了攝像頭、無線小工具和其他技術(shù)進(jìn)步。多虧了 Arduino 平臺,數(shù)百萬人發(fā)現(xiàn)了電子編程的美妙世界。關(guān)于如何通過藍(lán)牙在手機(jī)和 Arduino 之間交換數(shù)據(jù)的 100、500 條指令被寫...我在說什么?是的。我想通過藍(lán)牙在 Android 上的手機(jī)和 Arduino UNO 之間交換數(shù)據(jù) 100、501 次。但我想傳輸?shù)牟粌H僅是一組字符和數(shù)字,而是圖片。

有人會(huì)說這是不可能的,Arduino 速度太慢,無法快速處理大量數(shù)據(jù)。他將是絕對正確的。如果對 Arduino 有一點(diǎn)幫助 - 將所有“艱苦”的工作轉(zhuǎn)移到其他設(shè)備的肩上呢?并且有這樣的設(shè)備!

這是 Arduino 獨(dú)特的 TFT 屏蔽。有關(guān)此徽標(biāo)的信息在以下文章中:文章 1 文章 2在本教程中,我將演示如何通過藍(lán)牙連接 Arduino 和 Android 手機(jī),從 Arduino UNO 上的 OV7670 攝像頭獲取照片并將其傳輸?shù)?Android 手機(jī)。然后,相反,將圖片(來自相機(jī)的圖像)從 Android 手機(jī)傳輸?shù)?Arduino UNO 并顯示在獨(dú)特的 TFT 屏蔽的屏幕上。

為 Android 手機(jī)編寫了一個(gè)特殊的應(yīng)用程序。

TFT屏蔽的簡要特點(diǎn):

  • 尺寸 3.5 英寸對角線,
  • 分辨率 320x240,
  • 顏色數(shù) 65536(16 位),
  • 5個(gè)按鈕,
  • 用于連接 micro SD 卡的插槽,
  • 4 針 (2.54 mm) 連接器,用于連接藍(lán)牙模塊 HC-05 (-06)、ESP8286 WiFi 模塊。
  • 用于相機(jī) (OV7670) 的 20 針 (2.54 mm) 連接器。

所需組件列表

?
pYYBAGNOR8GAaVIyAADtezl-qxA968.jpg
?

硬件

注意:必須(!)使用 6-12 伏電源適配器來操作 TFT 屏蔽,因?yàn)?USB 的 500 mA 的最大電流不足以正常操作。

軟件

準(zhǔn)備中

軟件

所有演示草圖都是在 Arduino IDE 環(huán)境中編寫的,因此一開始需要安裝 Arduino IDE - https://www.arduino.cc/en/main/software。然后你需要為 TFT shield 安裝一個(gè)庫 - github.com/YATFT/YATFT 下載該庫并解壓到 Arduino IDE 目錄下的“l(fā)ibraries”文件夾中)。

安裝 Arduino IDE 后,您必須對 Arduino UNO 板進(jìn)行編程。為簡單起見,我建議單獨(dú)刷機(jī),不帶 TFT 屏蔽。為了這:

  • 將 USB 線連接到 Arduino UNO 板;
  • 電腦上運(yùn)行 Arduino IDE;
  • 選擇Arduino UNO所連接的對應(yīng)端口;
  • 下載ArduinoBluetoothCamera.ino演示草圖(和文件ov7670_regs.h用于相機(jī)初始化);
  • 單擊按鈕上傳。

如果 Arduino UNO 板編程成功,您可以繼續(xù)下一步。

ArduinoBluetoothCamera.ino草圖:

/**********************************************************************
* SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
* ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A
* PARTICULAR PURPOSE. IN NO EVENT SHALL AUTHOR OR ITS LICENSORS BE
* LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY,
* CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY
* DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO
* ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES,
* LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS,
* TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT
* NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
***********************************************************************/
#include 
#include 
#include 
#include 
#include "ov7670_regs.h"
JPEG_DECODE  jpeg_decode;
YATFT  tft(0);
INTRFC ifc;
CAM    cam;
CODEC  codec;
SRL    srl;
#define IMG_SizeX    320
#define IMG_SizeY    240
uint8_t   mode = 0;
uint8_t   last_mode = 0;
uint8_t   start_capt = 0;
uint16_t  err;
void setup()
{
   // initialize the serial port
   Serial.begin(115200);
   // initialize the display
   tft.begin();
   tft.SetColor(BRIGHTRED);
   tft.ClearDevice();
}
void loop()
{
   // put your main code here, to run repeatedly:
   if (Serial.available())
   {
       uint8_t temp = Serial.read();
       switch (temp)
       {
           case 0x10: // Send single Photo
                mode = 1;
                start_capt = 1;
                if (last_mode != mode && last_mode != 2) {
                    tft.begin();
                    tft.SetRGB();               // Switch to RGB mode
                    cam.CamInit(&OV7670_QVGA[0][0]);
                    cam.CamVideoPreview(0, 0, 1, true);
                    codec.JPEGInit();
                    codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY);
                    delay(1000);
                }
                break;
           case 0x20: // Continuous send Photo
                mode = 2;
                start_capt = 2;
                if (last_mode != mode && last_mode != 1) {
                    tft.begin();
                    tft.SetRGB();               // Switch to RGB mode
                    cam.CamInit(&OV7670_QVGA[0][0]);
                    cam.CamVideoPreview(0, 0, 1, true);
                    codec.JPEGInit();
                    codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY);
                }
                break;
           case 0x30: // Receive single Photo
                mode = 3;
                start_capt = 3;
                if (last_mode != mode && last_mode != 4) {
                    tft.begin();
                    tft.SetYUV();               // Switch to YUV mode
                }
                break;
           case 0x40: // Continuous receive Photo
                mode = 4;
                start_capt = 4;
                if (last_mode != mode && last_mode != 3) {
                    tft.begin();
                    tft.SetYUV();               // Switch to YUV mode
                }
                break;
           default:
                break;
       }
   }
   if (mode == 1) // Send single Photo
   {
       if (start_capt == 1)
       {
           start_capt = 0;
           last_mode = mode;
           mode = 0;
           CamCapture();
       }
   }
   else if (mode == 2) // Continuous send Photo
   {
       while (1)
       {
           uint8_t temp = Serial.read();
           if (start_capt == 2)
           {
               start_capt = 0;
           }        
           if (temp == 0x21) // Stop ?
           {
               start_capt = 0;
               last_mode = mode;
               mode = 0;
               break;
           }
           if (CamCapture()) continue;
       }
   }
   else if (mode == 3) // Receive single Photo
   {
       if (start_capt == 3)
       {
           //Start capture
           start_capt = 0;
           last_mode = mode;
           mode = 0;
           Serial.print("!");
           srl.JPEGReadFromSerial(&jpeg_decode,  // jpeg decode structure
                                             0,  // x0 (left)
                                             0,  // y0 (top)
                                   GetMaxX()+1,  // x1 (right)
                                   GetMaxY()+1,  // y1 (bottom)
                                       32000); // max image size
           }
   }
   else if (mode == 4) // Continuous receive Photo
   {
       uint8_t temp = Serial.read();
       while (1)
       {
           if (start_capt == 4)
           {
               //Start capture
               start_capt = 0;
           }
           if (temp == 0x41) // Stop ?
           {
               start_capt = 0;
               last_mode = mode;
               mode = 0;
               break;
           }
           Serial.print("!");
           srl.JPEGReadFromSerial(&jpeg_decode,  // jpeg decode structure
                                             0,  // x0 (left)
                                             0,  // y0 (top)
                                   GetMaxX()+1,  // x1 (right)
                                   GetMaxY()+1,  // y1 (bottom)
                                        32000); // max image size
       }
   }
}
uint8_t  CamCapture(void)
{
   uint8_t temp = 0xff, temp_last = 0;
   bool is_header = false;
   uint32_t length = 0;
   length = codec.JPEGStart();
   uint32_t en_jpeg_address = ifc.rdReg32(0x414)<<2;
   int k = 0;
   if ((length >= 0x5FFFF) | (length == 0))
   {
       start_capt = 2;
       return 1;
   }
   temp = ifc.GetMem(en_jpeg_address+k);
   k++;
   length --;
   while ( length-- )
   {
       temp_last = temp;
       temp = ifc.GetMem(en_jpeg_address+k);
       k++;
       if (is_header == true)
       {
           Serial.write(temp);
       }
       else if ((temp == 0xD8) & (temp_last == 0xFF))
       {
           is_header = true;
           Serial.write(temp_last);
           Serial.write(temp);
       }
       if ( (temp == 0xD9) && (temp_last == 0xFF) ) //If find the end ,break while,
           break;
   }
   is_header = false;
   return 0;
}

OV7670_regs.h:

#ifndef OV7670_REGS_H
#define OV7670_REGS_H
const uint8_t OV7670_VGA[][2] PROGMEM =
{
   {   1, 0x42}, // Size of byte, Address (ID) 
   { 640/16,  480/16}, // Size X, Size Y
   {0b01000010, 0b00000100}, // Reset_Enable_N, 7|6|5|4|3|Vsync Invert|Hsync Invert|0
   {0x3a, 0x0C},   {0x40, 0xC0},   {0x12, 0x00},   {0x0c, 0x00},           
   {0x3e, 0x00},   {0x70, 0x3A},   {0x71, 0x35},   {0x72, 0x11},
   {0x73, 0xF0},   {0xa2, 0x02},   {0x11, 0x80},   {0x7a, 0x18},
   {0x7b, 0x02},   {0x7c, 0x07},   {0x7d, 0x1F},   {0x7e, 0x49},
   {0x7f, 0x5A},   {0x80, 0x6A},   {0x81, 0x79},   {0x82, 0x87},
   {0x83, 0x94},   {0x84, 0x9F},   {0x85, 0xAF},   {0x86, 0xBB},
   {0x87, 0xCF},   {0x88, 0xEE},   {0x89, 0xEE},   {0x13, 0xE0},
   {0x00, 0x00},   {0x10, 0x00},   {0x0d, 0x00},   {0x24, 0x98},
   {0x25, 0x63},   {0x26, 0xD3},   {0x2a, 0x00},   {0x2b, 0x00},
   {0x2d, 0x00},   {0x13, 0xe5},   {0x13, 0xe7},   {0x1e, 0x30},
   {0x74, 0x60},   {0x01, 0x80},   {0x02, 0x80},   {0x15, 0x10},
   {0x4f, 0x40},   {0x50, 0x34},   {0x51, 0x0C},   {0x52, 0x17},
   {0x53, 0x29},   {0x54, 0x40},   {0x57, 0x80},   {0x58, 0x1e},
   {0x41, 0x10},   {0x75, 0x60},   {0x76, 0x50},   {0x77, 0x48},
   {0x3d, 0x92},   {0x3b, 0x00},   {0x04, 0x00},   {0xff, 0xff},
};        
const uint8_t OV7670_QVGA[][2] PROGMEM =
{
   {   1, 0x42}, // Size of byte, Address (ID) 
   { 320/16,  240/16}, // Size X, Size Y
   {0b01000010, 0b00000100}, // Reset_Enable_N, 7|6|5|4|3|Vsync Invert|Hsync Invert|0
   {0x3a, 0x0C},   {0x40, 0xC0},   {0x12, 0x10},   {0x0c, 0x00},
   {0x3e, 0x00},   {0x70, 0x3A},   {0x71, 0x35},   {0x72, 0x11},
   {0x73, 0xF0},   {0xa2, 0x02},   {0x11, 0x80},   {0x7a, 0x18},
   {0x7b, 0x02},   {0x7c, 0x07},   {0x7d, 0x1F},   {0x7e, 0x49},
   {0x7f, 0x5A},   {0x80, 0x6A},   {0x81, 0x79},   {0x82, 0x87},
   {0x83, 0x94},   {0x84, 0x9F},   {0x85, 0xAF},   {0x86, 0xBB},
   {0x87, 0xCF},   {0x88, 0xEE},   {0x89, 0xEE},   {0x13, 0xE0},
   {0x00, 0x00},   {0x10, 0x00},   {0x0d, 0x00},   {0x24, 0x98},
   {0x25, 0x63},   {0x26, 0xD3},   {0x2a, 0x00},   {0x2b, 0x00},
   {0x2d, 0x00},   {0x13, 0xe5},   {0x13, 0xe7},   {0x1e, 0x30},
   {0x74, 0x60},   {0x01, 0x80},   {0x02, 0x80},   {0x15, 0x10},
   {0x4f, 0x40},   {0x50, 0x34},   {0x51, 0x0C},   {0x52, 0x17},
   {0x53, 0x29},   {0x54, 0x40},   {0x57, 0x80},   {0x58, 0x1e},
   {0x41, 0x10},   {0x75, 0x60},   {0x76, 0x50},   {0x77, 0x48},
   {0x3d, 0x92},   {0x3b, 0x00},   {0x04, 0x00},   {0xff, 0xff},
};        
#endif

安卓

在 Android 手機(jī)上,您需要安裝ArduinoTFT.apk。允許應(yīng)用使用藍(lán)牙和相機(jī)。

2020 年 5 月 26 日更新!

我添加了 ArduinoTFT.apk 的源代碼。原樣!下載ArduinoTFT.zip.h

,重命名為ArduinoTFT.zip 并解壓。享受!

2020 年 7 月 25 日更新!

“嗨,我遇到了同樣的問題,Android 應(yīng)用程序無法正常工作。授權(quán)應(yīng)用程序訪問智能手機(jī)相機(jī)后解決。就是這樣。再見”(c)

藍(lán)牙模塊

需要在藍(lán)牙模塊中設(shè)置匯率為115200(命令“AT+UART=115200, 0, 0”)。這是 Arduino UNO 管理接收和處理數(shù)據(jù)的最佳速度。(理論上可以提高速度,優(yōu)化數(shù)據(jù)接收和處理,但這需要更大的RAM)。關(guān)于如何設(shè)置匯率的更詳細(xì)說明可以在網(wǎng)上找到,例如,這里:https:/ /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/ 。

(!)請注意藍(lán)牙模塊連接到 Arduino UNO 的調(diào)試端口。因此,在使用藍(lán)牙時(shí),調(diào)試端口不可用。并且在對 Arduino UNO(配有藍(lán)牙模塊)進(jìn)行編程之前,必須斷開藍(lán)牙模塊。編程后,將其重新設(shè)置(?。?/font>

集會(huì)

?
?
?
?
poYBAGNOR8WAUbrBAAHcagtf9ow472.jpg
?
1 / 9 ? TFT-shield 和 Arduino UNO
?

該設(shè)備的組裝非常簡單:

  • 將 Arduino UNO 和 TFT-shield 連接在一起;
  • 將 OV7670 相機(jī)連接到屏蔽層 TFT-shield 上的 20 針連接器(有時(shí)我使用 2.54 毫米間距的有角度的 18-20 針連接器作為適配器);
  • 將藍(lán)牙模塊HC-06(HC-05)連接到TFT-shield上帶有“藍(lán)牙”字樣的4針連接器上;
  • 將 6-12V 電源適配器連接到 Arduino UNO 板上的電源輸入。

打開電源后,TFT shield 的屏幕應(yīng)變?yōu)榧t色。這意味著愿意從 Android 手機(jī)接收命令。

?
?
?
1 / 6 ? ArduinoTFT 應(yīng)用程序
?

在安卓手機(jī)上執(zhí)行以下操作:

  • 在 Android 手機(jī)上啟動(dòng)ArduinoTFT應(yīng)用程序;
  • 將手機(jī)置于水平位置;
  • 開啟藍(lán)牙連接,選擇檢測到的藍(lán)牙模塊(HC-06);

屏幕上應(yīng)出現(xiàn)兩個(gè)窗口和四個(gè)按鈕:

  • 右上角窗口是手機(jī)的相機(jī)取景窗口;
  • 左側(cè)大窗口 - 接收或發(fā)送的圖像。

按鈕功能:

  • 將單個(gè)圖像從 Android 手機(jī)傳輸?shù)?Arduino;
  • 將圖像從 Android 手機(jī)連續(xù)傳輸?shù)?Arduino;
  • 將單個(gè)圖像從 Arduino 傳輸?shù)?Android 手機(jī);
  • 將圖像從 Arduino 連續(xù)傳輸?shù)?Android 手機(jī)。

圖像大小為 320x240 像素 (2-5 kB)。本章有一個(gè)演示視頻。

再一次問好!有一個(gè)用于一系列屏幕的更新庫,目前由兩個(gè)屏蔽和兩個(gè)分線板組成。草圖的編譯取決于所選版本(從 1 到 4)和微控制器類型(MegaAVR 或 ESP-32)。添加了照片,示例。更多信息可以在https://github.com/Ekaburg/EkaTFT中找到。

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
主站蜘蛛池模板: 国产精品久久久久久久久99热| 日韩亚洲国产中文字幕欧美| 亚洲卫视论坛| 国产嫩草在线观看| 深夜释放自己在线观看| SM调教贱屁股眼哭叫求饶H| 免费观看桶机十分钟| 自拍黄色片| 久久性色AV亚洲电影无码| 野花日本免费完整版高清版动漫 | 青草国产在线视频免费| 97国产露脸精品国产麻豆| 快播看av| 佐山爱痴汉theav| 老熟女重囗味GRANNYBBW| 中文字幕亚洲乱码熟女在线| 久久国产高清视频| 在线va无卡无码高清| 久久re6热在线视频精品66| 亚洲三级在线观看| 精品无码乱码AV| 伊人影院香蕉久在线26| 久久精品国产在热亚洲完整版 | 被送到黑人性奴俱乐部| 且试天下芒果免费观看| 成人公开免费视频| 肉肉描写很细致的黄文| 国产短视频精品区| 亚洲AV无码一区二区三区乱子伦| 国产人妻麻豆蜜桃色| 亚洲成人在线免费| 精品国产福利在线视频| 伊人久久大香线蕉影院95| 久久久久久久网站| 4484在线观看视频| 欧美精品专区免费观看| 大岛优香久久中文字幕| 无码成A毛片免费| 国产中文字幕一区| 永久精品视频无码一区| 蜜桃狠狠色伊人亚洲综合网站|