国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

micropython 自制數(shù)碼相機

這篇具有很好參考價值的文章主要介紹了micropython 自制數(shù)碼相機。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

像頭(CAMERA或WEBCAM)又稱為電腦相機、電腦眼、電子眼等,是一種視頻輸入設備,被廣泛的運用于視頻

會議,安防系統(tǒng)??、圖像采集系統(tǒng)、?環(huán)境監(jiān)控?、工業(yè)現(xiàn)場過程控制?等方面。本實驗用TPYBoard? v102以

及PTC06?串口攝像頭模塊DIY一個簡易的照相機。

1.所用器材:

??? TPYBoard v102 ?1塊

??? PTC06?串口攝像頭模塊1個

????杜邦線若干

??? TF卡1個

????下載數(shù)據(jù)線1條

2.TPYBoard v102簡介

TPYBoard? v102主控芯片采用STM32F405,M4的內(nèi)核,168MHZ的最高運行速度,1024KB的Flash,192KB的

RAM,內(nèi)置SD卡槽,最大支持8G內(nèi)存的內(nèi)存卡。板載四個LED燈和一個加速度傳感器。TPYBoard v102板載

30?個通用GPIO?接口、?2個?SPI?接口、2個?CAN??接口、2個I2C??接口、?5個?USART?接口、?2個ADC接

口?(精度12bit?)?、2個DAC接口、?? 1個SWD接口??膳c大部分常用傳感器模塊連接。

3. PTC06?串口攝像頭模塊簡介:

?

PTC06?串口攝像頭模塊是一款集圖像采集、拍攝控制、數(shù)據(jù)壓縮、串口傳輸于一體的工業(yè)級圖像采集?處理模

塊。其內(nèi)置的高性能數(shù)字信號處理芯片實現(xiàn)了對原始圖像的高比例壓縮。產(chǎn)品圖像輸?出采用標準?JPEG?格

式,可方便地兼容各種圖像處理軟件;采用?3?線制?TTL?電平?UART?通?信接口,可以方便地實現(xiàn)與單片機或

其他微處理器連接。

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

自制數(shù)碼相機,數(shù)碼相機

其中對于串口控制拍照,讀取靜態(tài)圖片的應用中,只需要用到?GND,RX,TX,VCC?這?4?個信號線。?如果是

要輸出模擬視頻的應用,才需要將?CVBS?信號。

注意:?TX?和?RX?是?3.3v?的?TTL?電平信號。

4.接線方式:

自制數(shù)碼相機,數(shù)碼相機

5.實驗步驟.

基本原理:TPYboard v102?通過串口與串口攝像頭模塊(PTC06)進行連接,通過按鍵控制模塊進行拍照,并

保存到TF卡中。

上電后,等待ToyBoard v102板載綠燈亮起,說明攝像頭模塊初始化完畢,按一下USR鍵,控制攝像頭進行拍

照,藍燈會閃爍,說明正在傳輸圖片數(shù)據(jù),等待藍燈熄滅后,說明傳輸完畢。

按一下rst鍵讓板子重新加載一下TF卡,打開TF卡就會看到一個新生成的jpeg文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-825776.html

"""

 
import pyb
from pyb import UART,Switch
 
"""
拍照的基本流程
--------------------
1.清空圖片緩存
2.發(fā)送拍照命令
3.獲取圖片的長度
4.根據(jù)長度讀取圖片數(shù)據(jù)
 
使用到的指令與返回的數(shù)據(jù)格式
-------------------------------
復位
0x56 0x00 0x26 0x00
返回
0x76 0x00 0x26 0x00 +DSP 版本信息+Init end
------------------------
清空圖片緩存 
0x56 0x00 0x36 0x01 0x02
返回
0x76 0x00 0x36 0x00 0x00
-------------------------
拍照命令
0x56 0x00 0x36 0x01 0x00
返回
0x76 0x00 0x36 0x00 0x00
--------------------------
讀所拍圖片的長度
56 00 34 01 00
返回
0x76 0x00 0x34 0x00 0x04 0x00 0x00 XX YY
(XX 為高位字節(jié),YY 為低位字節(jié))
--------------------------
讀取圖片數(shù)據(jù)
0x56 0x00 0x32 0x0C 0x00 0x0A 0x00 0x00 AA BB 0x00 0x00 XX YY 0x00 0xFF
AA BB:起始地址(先高位字節(jié),后低位字節(jié).必須是8的倍數(shù))
XX YY:本次讀的數(shù)據(jù)長度(先高位字節(jié),后低位字節(jié))
返回
76 00 32 00 00 FF D8 ....... FF D9 76 00 32 00 00
(完整的JPEG 圖片文件是以 FF D8 開始 FF D9 結(jié)尾)
"""
#-----Command---------#
initcmd=b'\x56\x00\x26\x00' #復位指令
clearcmd=b'\x56\x00\x36\x01\x02' #清除緩存
photocmd=b'\x56\x00\x36\x01\x00' #拍照
lengthcmd=b'\x56\x00\x34\x01\x00' #獲取圖片長度
readcmd=b'\x56\x00\x32\x0C\x00\x0A\x00\x00' #獲取圖片數(shù)據(jù)
responseCmd=b'\x76\x00\x32\x00\x00'#返回的圖片數(shù)據(jù)固定頭和尾
#---------------------------------#
isFlag=0#標識是否初始化
isPhoto=0#標識是否發(fā)送拍照命令
num=1
f_name='/sd/photo%s.jpeg'#保存的文件名稱
nBytes=512#每次讀取的字節(jié)數(shù)
#---------------------------------#
uart=UART(4,115200,timeout=100)#串口4 TX-X1 RX-X2
 
#------將10進制轉(zhuǎn)為16進制字節(jié)數(shù)組--------#
def convert_Data(num):
    if num>255:
        num_h=hex(num)
        if len(num_h)<6:
            num_h_a=num_h[:3]
            num_h_b='0x'+num_h[3:]
        else:
            num_h_a=num_h[:4]
            num_h_b='0x'+num_h[4:]
        byte_num=bytes([int(num_h_a,16),int(num_h_b,16)])
    else:
        byte_num=b'\x00'+bytes([num])
    return byte_num
#---------------------------------
#函數(shù)名:get_photo
#描述:獲取圖片數(shù)據(jù)
#參數(shù):起始地址、讀取長度
#返回:成功返回正常數(shù)據(jù),失敗返回0
#---------------------------------/
def get_photo(add,readlen):
    global readcmd,responseCmd
     
    cmd=readcmd+add+b'\x00\x00'+readlen+b'\x00\xFF'
    uart.write(cmd)
    while uart.any()<=0:
        continue
    data=uart.read()
    #print('data:',data)
    #print('data[0:5]:',data[0:5])
    #print('data[-5:]:',data[-5:])
    if data[0:5]==responseCmd and data[-5:]==responseCmd:
        revdata=data[5:-5]
        print('revdata:',revdata)
    else:
        revdata=0
    return revdata
#---------------------------------
#函數(shù)名:test
#描述:USR按鍵的回調(diào)函數(shù)。
#按鍵每按1次拍照1次
#---------------------------------/
def test():
    global num,isPhoto
    pyb.delay(30)
    if(sw()):
        sw.callback(None)#正在獲取數(shù)據(jù)時 禁用回調(diào)
        isPhoto=0
        num+=1
        pyb.LED(3).on()
        #清除緩存
        uart.write(clearcmd)
#等待模塊上電完畢       
print('wait......')
pyb.delay(2800)
print('init start.......')
uart.write(initcmd)
sw=Switch()
sw.callback(test)
while True:
    if uart.any()>0:
        data=uart.read()
        print('revdata:',data)
        if isFlag==0:
            #說明接收的是復位后的信息
            if data==b'Init end\r\n':
                #復位完畢
                print('init ok.......')
                pyb.delay(2000)
                isFlag=1
                pyb.LED(2).on()
        else:
            if len(data)>=5:
                if data[0]==118:#0x76
                    if data[2]==54:#0x36
                        if isPhoto==0:
                            #清除緩存返回
                            print('-----clear buffer ok----')
                            isPhoto=1
                            uart.write(photocmd)
                        else:
                            #拍照返回
                            print('-----taking pictures ok----')
                            uart.write(lengthcmd)
                    if data[2]==52:#0x34
                        print('photo length:',data[7],'-',data[8])
                        tlen=data[7]*256+data[8]
                        t_c=tlen//nBytes
                        t_y=tlen%nBytes
                        add=0
                        #256=[0x01,0x00] 512=[0x02,0x00]
                        length=convert_Data(nBytes)
                        name=f_name % str(num)
                        print('filename:',name)
                        for i in range(0,t_c):
                            add=convert_Data(i*nBytes)
                            #每512字節(jié)寫一次
                            revdata=get_photo(add,length)
                            if revdata!=0:
                                f=open(name,'a')
                                f.write(revdata)
                                f.close()
                            pyb.LED(4).toggle()
                            print('-------------',i)
                            pyb.delay(100)
                        add=convert_Data(t_c*nBytes)    
                        revdata=get_photo(add,convert_Data(t_y))
                        if revdata!=0:
                            f=open(name,'a')
                            f.write(revdata)
                            f.close()
                        pyb.LED(3).off()
                        pyb.LED(4).off()
                        pyb.delay(100)
                        print('*========================================*')
                        sw.callback(test)
            else:
                print('-----data length error-----')

到了這里,關(guān)于micropython 自制數(shù)碼相機的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Python pyglet 自制3D引擎入門(二) -- 繪制立體心形,動畫和相機控制

    Python pyglet 自制3D引擎入門(二) -- 繪制立體心形,動畫和相機控制

    Python作為目前較廣泛的編程語言, 用于制作3D游戲可謂得心應手。本文講解使用Python pyglet庫自制簡易3D引擎的方法技巧。 上篇:Python pyglet 自制3D引擎入門(一) – 繪制幾何體、創(chuàng)建3D場景 先放效果圖: pyglet.window 部分用于實現(xiàn)窗口操作, pyglet.gl 以及 pyglet.gl.glu 模塊包含了OpenGL的

    2024年02月10日
    瀏覽(28)
  • [micropython k210] 基于 Socket 實現(xiàn) MicroPython 的 HTTP 上傳文件(multipart/form-data)

    [micropython k210] 基于 Socket 實現(xiàn) MicroPython 的 HTTP 上傳文件(multipart/form-data)

    下述內(nèi)容需要具備 HTTP 的基礎(chǔ)知識,如果不知道的可以過一遍 HTTP 協(xié)議詳解 繼上次在 K210 實現(xiàn) HTTP Download 文件(https 也支持辣),現(xiàn)在就來說說直接基于 socket 的上傳文件實現(xiàn)吧。 首先準備一個 Server 文件服務器的 CPython 代碼,這個是再簡單不過了。 可以看到實現(xiàn)處理了一個

    2024年02月08日
    瀏覽(28)
  • MicroPython VSCode開發(fā)環(huán)境搭建

    MicroPython VSCode開發(fā)環(huán)境搭建

    本文中,使用的是 ESP32模塊的開發(fā)板,下面的例子都是以ESP32開發(fā)板作為例子進行說明,如果你用的是其它的MicroPython開發(fā)板,只需要下載相應的固件和工具進行操作,大同小異。 操作系統(tǒng)使用的Windwos,如果你使用的Mac或者Linux,可能在下載或安裝一些工具的時候會有差別,

    2024年02月04日
    瀏覽(26)
  • 自制Breadcrumb 面包屑

    自制Breadcrumb 面包屑

    使用場景: 當系統(tǒng)擁有超過兩級以上的層級結(jié)構(gòu)時 當需要告知用戶『你在哪里』時 當需要向上導航的功能時

    2024年01月19日
    瀏覽(21)
  • 自制游戲引擎

    自制游戲引擎

    這是一個玩具 SmallEngine是引擎的核心模塊,封裝渲染功能和場景管理功能等 Editor是編輯器,類似unity和ue編輯器,能夠動態(tài)添加對象和組件 Sandbox是游戲播放器,能夠運行游戲 參考 https://www.bilibili.com/video/BV1KE41117BD/?spm_id_from=333.788.recommend_more_video.0vd_source=be4b42409fb0d5ad1e1bd5a5715b7da0 引

    2024年02月13日
    瀏覽(24)
  • 【Linux】自制shell

    【Linux】自制shell

    本期我們利用之前學過的知識,寫一個shell命令行程序 目錄 一、初始代碼 二、使用戶輸入的ls指令帶有顏色分類 三、解決cd指令后用戶所在路徑不變化問題 3.1 chdir函數(shù) 四、關(guān)于環(huán)境變量的問題 ? 上述代碼我們實現(xiàn)了一個基本的shell命令行程序,其實現(xiàn)基本思路為: 使用fg

    2024年02月07日
    瀏覽(13)
  • 自制課程表小程序

    自制課程表小程序

    微信開發(fā)者工具:穩(wěn)定版 Stable Build 根據(jù)自己電腦的系統(tǒng)下載對應的版本 完整代碼連接: https://pan.baidu.com/s/1VbgPOS6CUOae8vg2axhGIg?pwd=hk9e 提取碼:hk9e 先把完整代碼的壓縮包解壓,并記住這個路徑,后面要用 1.打開下載好的微信開發(fā)工具, 注意不要用游客登錄 ,我一開始就是游客

    2024年02月09日
    瀏覽(37)
  • 自制Nuget包(C#)

    自制Nuget包(C#)

    自制C# Nuget包。 生成一個可以通過Nuget管理自動應用的包,生成效果如圖: 整個制作過程分為兩步:第一步制作Nuget包,第二步上傳Nuget包到Nuget網(wǎng)站(地址:https://www.nuget.org) No1:采用Vs2012及以上版本,新建類庫如圖: No2:鼠標移動到類項目名稱上,點擊鼠標右鍵,選擇屬

    2024年02月15日
    瀏覽(16)
  • C#中添加自制控件

    C#中添加自制控件

    先看最終成品為一個可以在XY坐標系下,進行點位顯示的控件 制作過程: 1.添加用戶控件類 2.進入代碼編輯頁面 套路式開發(fā):繼承 UserControl? ?? public partial class PointCurve : UserControl 初始化過程: 畫圖類繪制對象的三大件: ? ? ? ?//畫布 ? ? ? ? private Graphics g; ? ? ? ? //畫

    2024年02月04日
    瀏覽(21)
  • 自制手寫機器人

    自制手寫機器人

    寫字機器人模擬在畫圖板上寫字效果? 寫了一套寫字機器人代碼,有多種字體可供選擇,需要的朋友私信獲取代碼和軟件 ? ?

    2024年02月12日
    瀏覽(9)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包