1. 程式人生 > >痞子衡嵌入式:走進二維碼(QR Code)的世界(1)- 引言

痞子衡嵌入式:走進二維碼(QR Code)的世界(1)- 引言


  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是走進二維碼(QR Code)的世界專題的引言。

  如今二維碼可以說是深入走進大家的生活了,推送名片、掃碼支付都離不開它,大家幾乎每天都會和二維碼打交道。雖然大家都知道二維碼的各種應用,但很多人並不知道二維碼的原理。做嵌入式這行的人一大特質就是喜歡研究各種技術本身,痞子衡早就對二維碼技術感興趣了。上期《嵌入式半月刊》的最後,痞子衡介紹了一個基於i.MXRT1050的掃碼支付終端(QM50),這是一個二維碼識別的應用。這個應用徹底激活了痞子衡對二維碼的好奇心,所以接下來痞子衡打算帶大家一起深入研究一下二維碼技術,從零開始認識二維碼,並最終在MCU上實現二維碼生成與識別的設計。
  如下圖左邊所示的矩形二維碼是大家最常看到的型別,網上可以找到很多資料,也有很多成熟的開源庫,痞子衡的最終目標不是研究這個已經沒啥祕密可言的二維碼,右邊那個放射狀的圓形二維碼才是痞子衡更感興趣的,這是微信於2017年推出的全新設計的小程式二維碼,網上關於這種二維碼的設計資料非常少,也沒有開源庫,所以痞子衡打算實現一下這種圓形二維碼。

  今天痞子衡就先給大家簡單介紹一下QR Code基本知識以及這個專題後續的推進計劃:

一、QR Code入門

1.1 二維碼起源與種類

  在介紹二維碼之前,很有必要先提一下它的老大哥條形碼(barcode),條形碼技術早在20世紀40年代就被髮明出來了,只不過到了70年代鐳射束掃描器的問世才使得條形碼技術真正落地。條形碼常用的碼制有EAN、UPC、Codabar、Code 39、Code 128等。

  條形碼本質上屬於一維碼,一維碼所攜帶的資訊量有限,如EAN-13碼僅能容納13位阿拉伯數字,更多的資訊只能依賴資料庫的支援,離開了預先建立的資料庫,這種條形碼就沒有意義了,因此,在一定程度上也限制了條形碼的應用範圍。基於這個原因,在20世紀80年代出現了二維碼。
  二維碼依靠其龐大的資訊攜帶量,能夠把過去使用一維條形碼時儲存於後臺數據庫中的資訊包含在二維條形碼中,可以直接通過閱讀二維條形碼得到相應的資訊,並且二維條形碼還有錯誤修正技術及防偽功能,增加了資料的安全性。全球現有250多種二維碼,其中常見技術標準有PDF417,QRCode,Code49、Code16K,CodeOne等20餘種。

1.2 QR Code發明人

  目前最流行的二維碼非QR Code標準莫屬,這是來自日本的電裝公司發明的一種二維碼。關於QR Code的發展歷史可以看電裝公司自己寫的軟文《QR碼的成功之路》。QR Code於2000年被正式採納為ISO國際標準 (ISO/IEC18004)。

  • 電裝公司官網:https://www.denso-wave.com/
  • QR Code官網:https://www.qrcode.com/

  這是QR Code的簡要標準,大家先睹為快:

  • 規範手冊:ISO/IEC 18004:2015 Information technology — Automatic identification and data capture techniques — QR Code bar code symbology specification
  • 線上閱讀:https://www.doc88.com/p-3847760679293.html
  • 中文譯本:https://www.jianshu.com/p/7f0f30f20ef5

1.3 QR Code基本概念

  QR Code有三個基本概念你必須要知道,分別是模型、版本、糾錯能力。

  QR Code一共有兩個模型,分別是模型1和模型2。模型1是最早製作的QR Code,最高版本為14(73×73碼元),最多可以處理1167位數字。模型2是模型1的改良版,它在二維碼變形的情況下也能順利讀取資料。當二維碼被列印在曲面上,或者由於讀取角度等原因導致二維碼變形時,仍然可以通過設定在二維碼內部的對齊模式有效讀取。模型2最高版本為40(177×177碼元),最多可以處理7089位數字。

  現在市面上主流的就是QR Code模型2,後面文章所提的QR Code均指模型2。QR Code設有1到40的不同版本(種類),每個版本都具備固有的碼元結構(碼元數)。(碼元是指構成QR Code的方形黑白點)。“碼元結構”是指二維碼中的碼元數。從版本1(21碼元×21碼元)開始,在縱向和橫向各自以4碼元為單位遞增,一直到版本40 (177碼元×177碼元)。

  QR Code具有“糾錯功能”。即使編碼變髒或破損,也可自動恢復資料。這一“糾錯能力”具備4個級別,使用者可根據使用環境選擇相應的級別。調高級別,糾錯能力也相應提高,但由於資料量會隨之增加,編碼尺寸也也會變大。
  QR Code的糾錯功能是通過將Reed-solomon Codes(RS碼)附加到原資料中的方式實現的。RS編碼是應用於音樂CD等用途的數學糾錯方法。它能以位元組為單位進行糾錯,適合用於錯誤位置會集中的突發錯誤。

二、QR Code變種:微信小程式碼

2.1 QR Code變種

  前面介紹的是最標準的QR Code樣式,但二維碼發展到現在已經出現了很多變種,有彩色圖片、動圖、甚至非矩形的。這些變異二維碼本質上與標準QR Code原理一致,只是在編碼排版上有所不同,因此生成和識別工具也不同。

2.2 微信小程式碼

  微信小程式碼也是一種異形碼,這是騰訊2017年1月為微信小程式專門設計的一種二維碼式樣,這種異形並不是微信的首創,Facebook、Snap等公司都已經推出過類似的異形碼。這種小程式碼相比標準二維碼有如下幾個優點:

  • 觀賞性:小程式碼與普通二維碼相比,看起來更美觀
  • 掃碼預期:掃碼前能明確知道掃碼之後將會體驗到一個小程式
  • 安全性:小程式碼目前只能通過微信產生,並且只能通過微信識別,安全性更高
  • 品牌宣傳:每個小程式碼右下角都是固定的微信小程式 Logo,每見到一次小程式碼,大家就能多一次聯想到微信小程式
  • 高容錯性:當一張二維碼圖片中間嵌有某些 Logo 圖片時,其實相當於是把最中間部分有用的編碼資訊挖掉,再貼一張 Logo 圖片上去。而小程式碼不同,中間的 Logo 區並不包含資料編碼的部分,因此小程式碼擁有更高的容錯性

  目前小程式碼一共支援 3 種容量,分別是 36 射線、54 射線和 72 射線:

  因為小程式碼的專用性,目前它的生成都只能通過呼叫微信官方API介面,關於小程式碼的設計文件寥寥無幾,來自騰訊官方的文章《你一定不知道,小程式碼是這樣綻放的》只稍稍透露了一些。

三、走進QR Code世界之路

  鑑於以上介紹,痞子衡新開的這個專題後續推進計劃如下:

  • 階段一:學習標準QR Code原理,使用Python搭建一個二維碼生成與識別平臺(基於現有開源庫)
  • 階段二:深入標準QR Code原理,純手工寫Python程式碼實現Version1,ECC Level為L的二維碼生成與識別
  • 階段三:學習微信小程式碼原理,純手工寫Python程式碼實現36射線小程式碼生成與識別
  • 階段四:將Python端手工實現移植到MCU端,在i.MXRT1060-EVK板上實現二維碼生成與識別
  • 階段五:移植一個成熟開源庫到MCU端,在i.MXRT1060-EVK板上實現二維碼生成與識別

  至此,走進二維碼(QR Code)的世界專題的引言痞子衡便介紹完畢了,掌聲在哪裡~~~

歡迎訂閱

文章會同時釋出到我的 部落格園主頁、CSDN主頁、微信公眾號 平臺上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

相關推薦

痞子嵌入式走進(QR Code)的世界1- 引言

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是走進二維碼(QR Code)的世界專題的引言。   如今二維碼可以說是深入走進大家的生活了,推送名片、掃碼支付都離不開它,大家幾乎每天都會和二維碼打交道。雖然大家都知道二維碼的各種應用,但很多人並不知道二維碼的原理。做嵌入式這行的人一大特質

痞子嵌入式語音處理工具pzh-speech誕生記2- 介面構建(wxFormBuilder3.8.0)

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是語音處理工具pzh-py-speech誕生之介面構建。   之前痞子衡設計過一個串列埠除錯助手pzh-py-com,也專門寫過一篇關於其介面構建的文章 《串列埠除錯工具pzh-com誕生記(2)- 介面構建》,今天咱們來構建pzh-py-s

痞子嵌入式語音處理工具pzh-speech誕生記4- 音訊錄播實現(PyAudio)

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是語音處理工具pzh-py-speech誕生之音訊錄播實現。   音訊錄播是pzh-py-speech的主要功能,pzh-py-speech藉助的是Python自帶wave庫以及第三方PyAudio庫來實現的音訊播放和錄製功能,今天痞子衡為大

痞子嵌入式超級下載演算法(RT-UFL)開發筆記2 - 識別當前i.MXRT型號

----   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是**超級下載演算法開發筆記(2)之識別當前i.MXRT型號**。   文接上篇 [《超級下載演算法(RT-UFL)開發筆記(1) - 執行在不同CM核心下》](https://www.cnblogs.com/henjay724

痞子嵌入式超級下載演算法(RT-UFL)開發筆記3 - 統一FlexSPI驅動訪問

----   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是**超級下載演算法開發筆記(3)之統一FlexSPI驅動訪問**。   文接上篇 [《超級下載演算法(RT-UFL)開發筆記(2) - 識別當前i.MXRT型號》](https://www.cnblogs.com/henjay

痞子嵌入式超級下載演算法(RT-UFL)開發筆記4 - 輪詢Flash配置引數

----   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是**超級下載演算法開發筆記(4)之輪詢Flash配置引數**。   文接上篇 [《超級下載演算法(RT-UFL)開發筆記(3) - 統一FlexSPI驅動訪問》](https://www.cnblogs.com/henjay7

Qt的解析/掃描Zxing與生成qrencode

對Zxing和qrencode的封裝 解析/掃描部分底層為Zxing 生成部分底層為qrencode 注:我的開發環境是Qt5.5.0 效果圖: 掃描到以後: 程式碼這樣使用: Jas

QRCode生成方案及其在帶LOGO型中的應用2

                首先我們來看看二維碼的符號字元區域,然後再看看其編碼流程。QRCode的結構:圖9  QRCode的結構下圖為二維碼的符號字元區域示意:圖10   版本2-M符號的字元區域分佈示意圖11   版本7-H符號的符號字元佈置從上面可知,字元區域分佈中均有糾錯塊與資料塊。再看編碼流程

開源QR CODE編碼/解碼 識別 庫

在很近很近的未來,城市疏導局(前身是城市管理局)實行新政,秉持“用高科技提升城市形象”的原則,要給辦證從業人員開闢專門的廣告塗鴉牆,條件是:不得使用手工噴塗的字型,而必須改用工整的、不影響大眾視覺的二維碼。 上面的訊息,是“未來的我”給“現在的我”的提醒,看完條訊息,發財無門的我很興奮,辦證是一個多

資料 目錄 1. QR Code 1 2. 發展歷程 1 3. 特點 2 4. 儲存 3 5. 分類 3 5.1.1. 按原理分 3 6. 區別 與條碼區別 5 7. 什麼是制?

二維碼資料     目錄 1. 二維碼QR Code 1 2. 發展歷程 1 3. 特點 2 4. 儲存 3 5. 分類 3 5.1.1. 按原理分 3 6. 區別   與條碼區別 5 7. 什麼是碼制?Q

Python製作和條形碼掃描器 pyzbar

條碼在生活中隨處可見,其可分為三類:一維條碼、二維條碼、三維條碼 一維條碼:        我們平時習慣稱為條形碼。條形碼是將寬度不等的多個黑條和空白,按照一定的編碼規則排列,用以表達一組資訊的圖形識別符號。常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱

痞子嵌入式極精簡的Git命令教程1- 準備(init/config/.gitignore)

rec 精簡 gpo 課程 根據 信息 -- 文件中 嵌入式   今天是Git系列課程第一課,痞子衡給大家要講的是創建repo的準備工作。 1.建倉庫git init   第一步是創建一個空repo,這是一切操作的前提。 # 打開git bash命令行,切換到指定目錄下

痞子嵌入式極精簡的Git命令教程2- 連接(remote/clone)

我們 pair ssh key 技術 彈出 change 能夠 sha2 permanent   今天是Git系列課程第二課,上一課我們已經學會在本地創建一個空repo,痞子衡今天要講的是如何將本地倉庫與遠程建立聯系。 1.將本地倉庫掛上遠程git remote   本地

痞子嵌入式第一本Git命令教程3- 編輯(status/add/rm/mv)

this 通知 一次 ranch card use div 添加文件 app   今天是Git系列課程第三課,前兩課我們都是在做Git倉庫準備工作,今天痞子衡要講的是Git本地提交前的準備工作。   本地有了倉庫,我們便可以在倉庫所在目錄下做文件增刪改操作,這些操作默認都

痞子嵌入式第一本Git命令教程5- 提交(commit/format-patch/am)

今天 分布 控制系統 rom end stat 準備工作 多少 cond   今天是Git系列課程第五課,上一課我們做了Git本地提交前的準備工作,今天痞子衡要講的是Git本地提交操作。   當我們在倉庫工作區下完成了文件增刪改操作之後,並且使用git add將文件改動記

Android項目實戰四十四Zxing切換橫屏掃描

pla xxx mage tde min bar 分享圖片 spl 發現 原文:Android項目實戰(四十四):Zxing二維碼切換橫屏掃描Demo鏈接 默認是豎屏掃描,但是當我們在清單文件中配置橫屏顯示的時候: <activity

痞子嵌入式飛思卡爾i.MX RT系列微控制器啟動篇2- Boot配置(BOOT_CFG Pin/eFUSE)

TP 執行 不同 mcu 更新 oom als 配置 示例   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Boot配置。   在上一篇文章 飛思卡爾i.MX RT系列微控制器啟動篇(1)- Boot簡介 裏痞子衡為大

痞子嵌入式飛思卡爾i.MX RT系列微控制器介紹篇3- 命名規則

rule 成員 oom 嵌入 信息 100% 規則 控制器 今天   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的命名規則。   打開任何一款i.MX RT系列芯片的Data Sheet均可找到如下命名規則表,以i.M

痞子嵌入式飛思卡爾i.MX RT系列微控制器啟動篇3- Serial Downloader模式(sdphost/mfgtool)

efi RM pda lock mman www. esc https conn   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Serial Downloader模式。   在上一篇文章 飛思卡爾i.MX RT系列微

痞子嵌入式飛思卡爾i.MX RT系列微控制器啟動篇6- Bootable image格式與加載(elftosb/.bd/.bin)

before 詳細介紹 tab true 加載完成 table sdp 推薦 包含   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Bootable image格式與加載過程。   在i.MXRT啟動系列第三篇文章 飛