久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4086|回復: 1
打印 上一主題 下一主題
收起左側

Micropython實例之TPYBoardv102 DIY照相機

[復制鏈接]
跳轉到指定樓層
樓主
    攝像頭(CAMERA或WEBCAM)又稱為電腦相機、電腦眼、電子眼等,是一種視頻輸入設備,被廣泛的運用于視頻會議,安防系統  、圖像采集系統、 環境監控 、工業現場過程控制 等方面。本實驗用TPYBoard  v102以及PTC06 串口攝像頭模塊DIY一個簡易的照相機。


    1.所用器材:
    l   TPYBoard v102  1塊
    l   PTC06 串口攝像頭模塊1個
    l   杜邦線若干
    l   TF卡1個
    l   下載數據線1條

    2.TPYBoard v102簡介:
    TPYBoardv102主控芯片采用STM32F405,M4的內核,168MHZ的最高運行速度,1024KB的Flash,192KB的RAM,內置SD卡槽,最大支持8G內存的內存卡。板載四個LED燈和一個加速度傳感器。TPYBoard v102板載30個通用GPIO接口、 2個SPI接口、2個CAN接口、2個I2C接口、 5個USART 接口、 2個ADC接口(精度12bit )、2個DAC接口、1個SWD接口。可與大部分常用傳感器模塊連接。


    3. PTC06 串口攝像頭模塊簡介:
    PTC06 串口攝像頭模塊是一款集圖像采集、拍攝控制、數據壓縮、串口傳輸于一體的工業級圖像采集處理模塊。其內置的高性能數字信號處理芯片實現了對原始圖像的高比例壓縮。產品圖像輸 出采用標準 JPEG 格式,可方便地兼容各種圖像處理軟件;采用 3 線制 TTL 電平 UART 通 信接口,可以方便地實現與單片機或其他微處理器連接。

    默認波特率為 115200,其它可選波特率有 9600,19200,38400 和 57600。



    其中對于串口控制拍照,讀取靜態圖片的應用中,只需要用到 GND,RX,TX,VCC 這 4 個信號線。 如果是要輸出模擬視頻的應用,才需要將 CVBS 信號。注意: TX 和 RX 是 3.3v 的 TTL 電平信號。

    4.接線方式:



    5.實驗步驟.
    基本原理:TPYboard v102 通過串口與串口攝像頭模塊(PTC06)進行連接,通過按鍵控制模塊進行拍照,并保存到TF卡中。上電后,等待ToyBoard v102板載綠燈亮起,說明攝像頭模塊初始化完畢,按一下USR鍵,控制攝像頭進行拍照,藍燈會閃爍,說明正在傳輸圖片數據,等待藍燈熄滅后,說明傳輸完畢。按一下rst鍵讓板子重新加載一下TF卡,打開TF卡就會看到一個新生成的jpeg文件。

    6.源代碼:
  1. """
  2. #TPYBoard v102 驅動串口攝像頭PTC06 拍照并保存到TF卡
  3. #------------------------------------------------------
  4. #作者:山東蘿卜電子科技有限公司
  5. #時間:2018年03月15日
  6. """

  7. import pyb
  8. from pyb import UART,Switch

  9. """
  10. 拍照的基本流程
  11. --------------------
  12. 1.清空圖片緩存
  13. 2.發送拍照命令
  14. 3.獲取圖片的長度
  15. 4.根據長度讀取圖片數據

  16. 使用到的指令與返回的數據格式
  17. -------------------------------
  18. 復位
  19. 0x56 0x00 0x26 0x00
  20. 返回
  21. 0x76 0x00 0x26 0x00 +DSP 版本信息+Init end
  22. ------------------------
  23. 清空圖片緩存
  24. 0x56 0x00 0x36 0x01 0x02
  25. 返回
  26. 0x76 0x00 0x36 0x00 0x00
  27. -------------------------
  28. 拍照命令
  29. 0x56 0x00 0x36 0x01 0x00
  30. 返回
  31. 0x76 0x00 0x36 0x00 0x00
  32. --------------------------
  33. 讀所拍圖片的長度
  34. 56 00 34 01 00
  35. 返回
  36. 0x76 0x00 0x34 0x00 0x04 0x00 0x00 XX YY
  37. (XX 為高位字節,YY 為低位字節)
  38. --------------------------
  39. 讀取圖片數據
  40. 0x56 0x00 0x32 0x0C 0x00 0x0A 0x00 0x00 AA BB 0x00 0x00 XX YY 0x00 0xFF
  41. AA BB:起始地址(先高位字節,后低位字節.必須是8的倍數)
  42. XX YY:本次讀的數據長度(先高位字節,后低位字節)
  43. 返回
  44. 76 00 32 00 00 FF D8 ....... FF D9 76 00 32 00 00
  45. (完整的JPEG 圖片文件是以 FF D8 開始 FF D9 結尾)
  46. """
  47. #-----Command---------#
  48. initcmd=b'\x56\x00\x26\x00' #復位指令
  49. clearcmd=b'\x56\x00\x36\x01\x02' #清除緩存
  50. photocmd=b'\x56\x00\x36\x01\x00' #拍照
  51. lengthcmd=b'\x56\x00\x34\x01\x00' #獲取圖片長度
  52. readcmd=b'\x56\x00\x32\x0C\x00\x0A\x00\x00' #獲取圖片數據
  53. responseCmd=b'\x76\x00\x32\x00\x00'#返回的圖片數據固定頭和尾
  54. #---------------------------------#
  55. isFlag=0#標識是否初始化
  56. isPhoto=0#標識是否發送拍照命令
  57. num=1
  58. f_name='/sd/photo%s.jpeg'#保存的文件名稱
  59. nBytes=512#每次讀取的字節數
  60. #---------------------------------#
  61. uart=UART(4,115200,timeout=100)#串口4 TX-X1 RX-X2

  62. #------將10進制轉為16進制字節數組--------#
  63. def convert_Data(num):
  64.     if num>255:
  65.         num_h=hex(num)
  66.         if len(num_h)<6:
  67.             num_h_a=num_h[:3]
  68.             num_h_b='0x'+num_h[3:]
  69.         else:
  70.             num_h_a=num_h[:4]
  71.             num_h_b='0x'+num_h[4:]
  72.         byte_num=bytes([int(num_h_a,16),int(num_h_b,16)])
  73.     else:
  74.         byte_num=b'\x00'+bytes([num])
  75.     return byte_num
  76. #---------------------------------
  77. #函數名:get_photo
  78. #描述:獲取圖片數據
  79. #參數:起始地址、讀取長度
  80. #返回:成功返回正常數據,失敗返回0
  81. #---------------------------------/
  82. def get_photo(add,readlen):
  83.     global readcmd,responseCmd
  84.    
  85.     cmd=readcmd+add+b'\x00\x00'+readlen+b'\x00\xFF'
  86.     uart.write(cmd)
  87.     while uart.any()<=0:
  88.         continue
  89.     data=uart.read()
  90.     #print('data:',data)
  91.     #print('data[0:5]:',data[0:5])
  92.     #print('data[-5:]:',data[-5:])
  93.     if data[0:5]==responseCmd and data[-5:]==responseCmd:
  94.         revdata=data[5:-5]
  95.         print('revdata:',revdata)
  96.     else:
  97.         revdata=0
  98.     return revdata
  99. #---------------------------------
  100. #函數名:test
  101. #描述:USR按鍵的回調函數。
  102. #按鍵每按1次拍照1次
  103. #---------------------------------/
  104. def test():
  105.     global num,isPhoto
  106.     pyb.delay(30)
  107.     if(sw()):
  108.         sw.callback(None)#正在獲取數據時 禁用回調
  109.         isPhoto=0
  110.         num+=1
  111.         pyb.LED(3).on()
  112.         #清除緩存
  113.         uart.write(clearcmd)
  114. #等待模塊上電完畢      
  115. print('wait......')
  116. pyb.delay(2800)
  117. print('init start.......')
  118. uart.write(initcmd)
  119. sw=Switch()
  120. sw.callback(test)
  121. while True:
  122.     if uart.any()>0:
  123.         data=uart.read()
  124.         print('revdata:',data)
  125.         if isFlag==0:
  126.             #說明接收的是復位后的信息
  127.             if data==b'Init end\r\n':
  128.                 #復位完畢
  129.                 print('init ok.......')
  130.                 pyb.delay(2000)
  131.                 isFlag=1
  132.                 pyb.LED(2).on()
  133.         else:
  134.             if len(data)>=5:
  135.                 if data[0]==118:#0x76
  136.                     if data[2]==54:#0x36
  137.                         if isPhoto==0:
  138.                             #清除緩存返回
  139.                             print('-----clear buffer ok----')
  140.                             isPhoto=1
  141.                             uart.write(photocmd)
  142.                         else:
  143.                             #拍照返回
  144.                             print('-----taking pictures ok----')
  145.                             uart.write(lengthcmd)
  146.                     if data[2]==52:#0x34
  147.                         print('photo length:',data[7],'-',data[8])
  148.                         tlen=data[7]*256+data[8]
  149.                         t_c=tlen//nBytes
  150.                         t_y=tlen%nBytes
  151.                         add=0
  152.                         #256=[0x01,0x00] 512=[0x02,0x00]
  153.                         length=convert_Data(nBytes)
  154.                         name=f_name % str(num)
  155.                         print('filename:',name)
  156.                         for i in range(0,t_c):
  157.                             add=convert_Data(i*nBytes)
  158.                             #每512字節寫一次
  159.                             revdata=get_photo(add,length)
  160.                             if revdata!=0:
  161.                                 f=open(name,'a')
  162.                                 f.write(revdata)
  163.                                 f.close()
  164.                             pyb.LED(4).toggle()
  165.                             print('-------------',i)
  166.                             pyb.delay(100)
  167.                         add=convert_Data(t_c*nBytes)   
  168.                         revdata=get_photo(add,convert_Data(t_y))
  169.                         if revdata!=0:
  170.                             f=open(name,'a')
  171.                             f.write(revdata)
  172.                             f.close()
  173.                         pyb.LED(3).off()
  174.                         pyb.LED(4).off()
  175.                         pyb.delay(100)
  176.                         print('*========================================*')
  177.                         sw.callback(test)
  178.             else:
  179.                 print('-----data length error-----')
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:428008 發表于 2018-11-18 02:35 | 只看該作者
Micropytho,好學習之
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97日韩精品 | 国产精品视频一区二区三区四区国 | 午夜爽爽爽男女免费观看影院 | 欧美天堂在线 | 在线一区二区三区 | 精品中文字幕一区二区 | 99精品国产一区二区三区 | 中文字幕一区二区在线观看 | 日韩在线免费视频 | 亚洲国产一区二区三区, | 亚洲成人免费 | 麻豆久久久久久久久久 | 九九综合 | 91 在线 | 国产蜜臀97一区二区三区 | 91传媒在线观看 | 少妇午夜一级艳片欧美精品 | 在线视频亚洲 | 日韩一级不卡 | 羞羞视频网站 | 男女爱爱网站 | 天天综合久久 | 国产一区二区三区免费观看在线 | 国产亚洲一区二区精品 | 三级av网址 | 夜夜夜操 | 欧美成人免费在线视频 | 亚洲欧美视频一区 | 天天操妹子 | 久久久久国产一区二区三区四区 | 青娱乐av| 91观看| 精品国产乱码久久久久久闺蜜 | www.日本在线播放 | 成人在线观看欧美 | 精品一区在线 | 狠狠操狠狠操 | 亚洲成人一区 | 欧美日韩在线高清 | 欧美成人精品欧美一级 | 国产精品视频一区二区三区四蜜臂 |