I2C ADC模塊實(shí)戰(zhàn)指南:從ADS1115原理到Arduino/樹(shù)莓派高精度數(shù)據(jù)采集
1. 項(xiàng)目緣起為什么需要一塊獨(dú)立的I2C ADC模塊在嵌入式開(kāi)發(fā)和電子DIY項(xiàng)目中模擬信號(hào)采集是一個(gè)繞不開(kāi)的經(jīng)典需求。無(wú)論是讀取電位器的旋轉(zhuǎn)角度、測(cè)量光照強(qiáng)度、監(jiān)控電池電壓還是采集各類傳感器的模擬輸出如溫度、壓力、聲音我們都需要用到模數(shù)轉(zhuǎn)換器也就是ADC。很多微控制器比如我們熟悉的Arduino、ESP32、STM32其內(nèi)部都集成了ADC。既然如此為什么我們還需要像“Grove - I2C ADC”這樣的外部模塊呢這個(gè)問(wèn)題恰恰是理解這個(gè)模塊核心價(jià)值的起點(diǎn)。我最初接觸這個(gè)模塊是在一個(gè)需要同時(shí)采集多路高精度模擬信號(hào)的項(xiàng)目中。當(dāng)時(shí)使用的是一塊常見(jiàn)的開(kāi)發(fā)板其內(nèi)置ADC的精度只有10位并且在多通道切換時(shí)參考電壓會(huì)因板載其他電路而產(chǎn)生波動(dòng)導(dǎo)致讀數(shù)飄忽不定重復(fù)性很差。更麻煩的是當(dāng)我想同時(shí)連接四五個(gè)模擬傳感器時(shí)發(fā)現(xiàn)GPIO口不夠用了。每個(gè)模擬傳感器都需要獨(dú)占一個(gè)ADC輸入引腳這對(duì)于引腳資源本就緊張的微型控制器來(lái)說(shuō)是個(gè)大問(wèn)題。正是在這種“精度焦慮”和“引腳危機(jī)”的雙重壓力下我開(kāi)始尋找外置的ADC解決方案并最終鎖定了基于I2C總線的Grove ADC模塊。這個(gè)模塊的核心價(jià)值可以總結(jié)為三點(diǎn)精度提升、資源擴(kuò)展和系統(tǒng)簡(jiǎn)化。它通常采用專門的ADC芯片如TI的ADS1115提供高達(dá)16位的分辨率這意味著它可以將模擬電壓分成65536個(gè)等級(jí)相比常見(jiàn)的10位ADC1024級(jí)或12位ADC4096級(jí)在測(cè)量微小電壓變化時(shí)優(yōu)勢(shì)巨大。其次它通過(guò)I2C總線與主控通信只需要兩根信號(hào)線SCL SDA加上電源和地就可以在一條總線上掛載多個(gè)設(shè)備完美解決了GPIO口不足的問(wèn)題。最后Grove接口的即插即用特性省去了繁瑣的焊接和電平匹配工作讓開(kāi)發(fā)者能更專注于應(yīng)用邏輯本身。2. I2C ADC模塊的核心芯片與工作原理剖析市面上的Grove I2C ADC模塊其核心大多是一顆名為ADS1115的芯片也有使用ADS1015或其他型號(hào)的變體。這里我們以ADS1115為例深入拆解一下它是如何工作的以及為什么它比微控制器內(nèi)置ADC更適合精密測(cè)量。2.1 ADS1115芯片的關(guān)鍵特性ADS1115是一款超小型、低功耗、16位精度的Δ-ΣDelta-Sigma型ADC。它與微控制器內(nèi)置的SAR逐次逼近型ADC在原理上有顯著區(qū)別。SAR ADC通過(guò)一系列快速的比較和逼近來(lái)轉(zhuǎn)換電壓速度很快但容易受到噪聲干擾。而Δ-Σ ADC的工作原理是“過(guò)采樣”和“噪聲整形”它用極高的采樣率對(duì)輸入信號(hào)進(jìn)行采樣然后通過(guò)數(shù)字濾波器濾除高頻噪聲最終輸出高精度的結(jié)果。這個(gè)過(guò)程犧牲了一定的速度但換來(lái)了極高的精度和出色的抗噪聲能力特別適合測(cè)量直流或緩慢變化的信號(hào)比如傳感器輸出。ADS1115的主要參數(shù)令人印象深刻分辨率16位。這是其最大的賣點(diǎn)。輸入通道4路單端輸入或2路差分輸入。差分輸入可以測(cè)量?jī)蓚€(gè)引腳之間的電壓差能有效抑制共模噪聲在工業(yè)測(cè)量中非常有用。可編程增益放大器PGA增益可選1倍、2倍、4倍、8倍、16倍。這意味著你可以測(cè)量小至±0.256V增益為16時(shí)大至±6.144V增益為1時(shí)的信號(hào)量程非常靈活。數(shù)據(jù)速率可編程為8SPS到860SPS。速率越低噪聲抑制效果越好精度越高。接口標(biāo)準(zhǔn)的I2C接口支持多個(gè)地址選擇方便總線擴(kuò)展。2.2 I2C通信如何與模塊“對(duì)話”I2C總線是連接主控如Arduino和ADS1115模塊的橋梁。它只有兩根線SCLSerial Clock時(shí)鐘線由主設(shè)備產(chǎn)生用于同步數(shù)據(jù)。SDASerial Data數(shù)據(jù)線用于雙向傳輸數(shù)據(jù)。I2C通信是主從模式的。在這個(gè)場(chǎng)景里你的微控制器是主設(shè)備MasterADS1115模塊是從設(shè)備Slave。每次通信都由主設(shè)備發(fā)起過(guò)程可以概括為起始信號(hào) - 發(fā)送從設(shè)備地址7位 - 讀寫位 - 應(yīng)答 - 發(fā)送/接收數(shù)據(jù) - 應(yīng)答 - ... - 停止信號(hào)。ADS1115的I2C地址可以通過(guò)模塊上的ADDR引腳進(jìn)行配置通常有四個(gè)可選地址0x48 0x49 0x4A 0x4B。這意味著你可以在同一條I2C總線上最多掛載4個(gè)相同的ADC模塊而不會(huì)發(fā)生地址沖突輕松實(shí)現(xiàn)多達(dá)16路模擬信號(hào)的擴(kuò)展采集。與模塊“對(duì)話”的核心是讀寫其內(nèi)部的寄存器。ADS1115有幾個(gè)關(guān)鍵寄存器轉(zhuǎn)換寄存器16位存放最新的ADC轉(zhuǎn)換結(jié)果。配置寄存器16位這是模塊的“大腦”。你需要通過(guò)配置它來(lái)告訴ADS1115你要用哪個(gè)通道PGA增益設(shè)為多少數(shù)據(jù)速率多快是單次轉(zhuǎn)換還是連續(xù)轉(zhuǎn)換實(shí)際操作中我們通過(guò)I2C向配置寄存器寫入特定的值來(lái)設(shè)置工作模式然后觸發(fā)一次轉(zhuǎn)換或等待連續(xù)轉(zhuǎn)換的結(jié)果最后再?gòu)霓D(zhuǎn)換寄存器中讀取那16位的數(shù)字量。2.3 從數(shù)字量到實(shí)際電壓計(jì)算與校準(zhǔn)從ADS1115讀回來(lái)的是一個(gè)16位的有符號(hào)整數(shù)范圍-32768到32767。如何將它轉(zhuǎn)換成我們熟悉的電壓值呢這里需要一個(gè)簡(jiǎn)單的計(jì)算其核心是理解最小分辨率LSB。最小分辨率是指ADC數(shù)字值每變化1所代表的輸入電壓變化量。它由兩個(gè)因素決定滿量程電壓FSR和ADC的位數(shù)。公式為L(zhǎng)SB FSR / (2^N)對(duì)于16位的ADS1115N16所以分母是65536。而FSR又取決于你設(shè)置的PGA增益Gain。ADS1115的基準(zhǔn)電壓是內(nèi)部固定的約2.048V。在不同的增益下其輸入電壓范圍FSR如下PGA增益設(shè)置滿量程電壓FSR最小分辨率LSB2/3倍±6.144V187.5μV1倍±4.096V125μV2倍±2.048V62.5μV4倍±1.024V31.25μV8倍±0.512V15.625μV16倍±0.256V7.8125μV注意表格中的“2/3倍”增益是ADS1115的一個(gè)特殊設(shè)置其FSR為±6.144V這是由內(nèi)部基準(zhǔn)和分壓網(wǎng)絡(luò)決定的常見(jiàn)配置。因此實(shí)際電壓的計(jì)算公式為電壓 (讀取的ADC值 * LSB)例如你設(shè)置增益為4FSR±1.024V讀取到的ADC值為10000。那么LSB 1.024V / 32768 0.00003125V 31.25μV。實(shí)際電壓 10000 * 31.25μV 0.3125V。這里有一個(gè)非常重要的實(shí)操心得在進(jìn)行精密測(cè)量前最好對(duì)模塊進(jìn)行簡(jiǎn)單的校準(zhǔn)。用一個(gè)已知精度的電壓源比如萬(wàn)用表測(cè)量過(guò)的穩(wěn)定電源輸入一個(gè)固定電壓例如1.000V讀取ADC值并計(jì)算出一個(gè)“校準(zhǔn)系數(shù)”。后續(xù)測(cè)量時(shí)將計(jì)算結(jié)果乘以這個(gè)系數(shù)可以消除芯片個(gè)體差異和基準(zhǔn)電壓微小偏差帶來(lái)的系統(tǒng)誤差。3. 實(shí)戰(zhàn)應(yīng)用從連接調(diào)試到代碼實(shí)現(xiàn)理論清楚了我們動(dòng)手把它用起來(lái)。我將以一個(gè)最常見(jiàn)的場(chǎng)景為例使用Arduino Uno讀取Grove I2C ADC模塊上連接的模擬傳感器比如一個(gè)模擬角度傳感器。3.1 硬件連接與地址確認(rèn)Grove模塊的連接極其簡(jiǎn)單。使用一根Grove連接線一端插入ADC模塊另一端插入Arduino的I2C接口通常標(biāo)記為SDA和SCL。在Arduino Uno上這對(duì)應(yīng)的是A4SDA和A5SCL引腳。別忘了同時(shí)給Arduino和傳感器供電。連接好后第一件事是確認(rèn)模塊的I2C地址。你可以使用一個(gè)非常實(shí)用的Arduino程序——I2C Scanner。將以下代碼上傳到Arduino打開(kāi)串口監(jiān)視器波特率9600它會(huì)掃描總線上所有設(shè)備并打印出它們的地址。#include Wire.h void setup() { Wire.begin(); Serial.begin(9600); Serial.println(I2C Scanner); } void loop() { byte error, address; int nDevices 0; Serial.println(Scanning...); for(address 1; address 127; address ) { Wire.beginTransmission(address); error Wire.endTransmission(); if (error 0) { Serial.print(I2C device found at address 0x); if (address16) Serial.print(0); Serial.print(address, HEX); Serial.println( !); nDevices; } } if (nDevices 0) Serial.println(No I2C devices found\n); delay(5000); }如果模塊的ADDR引腳默認(rèn)接地通常如此你應(yīng)該會(huì)看到地址0x48。記下這個(gè)地址后續(xù)編程會(huì)用到。3.2 庫(kù)的選擇與基本讀取對(duì)于Arduino最常用的ADS1x15庫(kù)是Adafruit發(fā)布的Adafruit_ADS1X15。你可以通過(guò)Arduino IDE的庫(kù)管理器直接搜索安裝。安裝好后一個(gè)最簡(jiǎn)單的單次讀取A0通道電壓的示例如下#include Wire.h #include Adafruit_ADS1X15.h Adafruit_ADS1115 ads; // 使用ADS1115對(duì)于ADS1015使用 Adafruit_ADS1015 void setup() { Serial.begin(9600); Serial.println(Hello!); if (!ads.begin(0x48)) { // 初始化傳入掃描到的地址 Serial.println(Failed to initialize ADS.); while (1); } // 設(shè)置增益這里設(shè)為1±4.096V量程 ads.setGain(GAIN_ONE); } void loop() { int16_t adc0; adc0 ads.readADC_SingleEnded(0); // 讀取A0單端輸入 Serial.print(AIN0: ); Serial.print(adc0); Serial.print( (); Serial.print(ads.computeVolts(adc0)); Serial.println(V)); delay(1000); }這段代碼中ads.readADC_SingleEnded(0)會(huì)觸發(fā)一次單次轉(zhuǎn)換并返回A0通道的原始ADC值。ads.computeVolts(adc0)是庫(kù)提供的便捷函數(shù)會(huì)根據(jù)你之前設(shè)置的增益自動(dòng)將原始值換算成電壓值。踩坑提醒readADC_SingleEnded()函數(shù)內(nèi)部已經(jīng)完成了觸發(fā)轉(zhuǎn)換和等待結(jié)果的過(guò)程。如果你需要以固定頻率高速采樣使用單次轉(zhuǎn)換模式并在循環(huán)中調(diào)用它是可以的。但如果你需要絕對(duì)定時(shí)的采樣或者想降低主循環(huán)的延遲可以考慮使用ADS1115的連續(xù)轉(zhuǎn)換模式并配合中斷引腳DRDY來(lái)通知MCU數(shù)據(jù)已就緒。不過(guò)對(duì)于大多數(shù)傳感器應(yīng)用如溫度、光照1秒1次的采樣率完全足夠單次轉(zhuǎn)換模式更簡(jiǎn)單可靠。3.3 進(jìn)階應(yīng)用差分測(cè)量與高精度案例單端測(cè)量是以GND為參考測(cè)量輸入引腳對(duì)地的電壓。而差分測(cè)量則是測(cè)量?jī)蓚€(gè)輸入引腳如A0和A1之間的電壓差。這種方式有一個(gè)巨大的優(yōu)勢(shì)它可以抑制兩個(gè)輸入引腳上共有的噪聲。比如當(dāng)傳感器距離MCU較遠(yuǎn)引線會(huì)引入工頻干擾這種干擾會(huì)同時(shí)出現(xiàn)在A0和A1上做差分運(yùn)算時(shí)就被減掉了從而得到更純凈的信號(hào)。代碼實(shí)現(xiàn)同樣簡(jiǎn)單只需將函數(shù)換為ads.readADC_Differential_0_1()即可測(cè)量A0和A1的差值。讓我們看一個(gè)需要高精度ADC的典型場(chǎng)景稱重傳感器或壓力傳感器。這類傳感器通常是惠斯通電橋輸出信號(hào)非常微弱往往是毫伏級(jí)別。假設(shè)一個(gè)稱重傳感器在滿量程時(shí)輸出差動(dòng)信號(hào)為±2mV/V。如果我們用5V激勵(lì)電壓滿量程輸出就是±10mV。如果用Arduino內(nèi)置的10位ADC參考電壓5V其LSB約為5V/1024≈4.9mV。這意味著連最小變化都測(cè)不出來(lái)分辨率完全不夠。換用ADS1115我們將增益設(shè)置為16倍FSR±0.256V LSB7.8μV。此時(shí)滿量程的±10mV信號(hào)對(duì)應(yīng)的ADC數(shù)字量范圍大約是 ±(0.01V / 7.8μV) ≈ ±1282。我們?cè)?6位±32768的量程里只用了中間一小段但這恰恰保證了極高的分辨率和信噪比。微小的重量變化引起的幾個(gè)微伏的電壓波動(dòng)都能被清晰地捕捉到這是內(nèi)置ADC根本無(wú)法實(shí)現(xiàn)的效果。4. 常見(jiàn)問(wèn)題排查與性能優(yōu)化指南即使按照教程操作你也可能會(huì)遇到一些“坑”。下面是我在實(shí)際項(xiàng)目中總結(jié)的幾個(gè)典型問(wèn)題及其解決方案。4.1 讀數(shù)不穩(wěn)定或跳動(dòng)大這是新手最常見(jiàn)的問(wèn)題。可能的原因和解決辦法如下電源噪聲這是元兇之首。MCU的數(shù)字電路特別是開(kāi)關(guān)穩(wěn)壓器會(huì)產(chǎn)生大量高頻噪聲如果ADC模塊和傳感器共用不干凈的電源噪聲會(huì)直接耦合進(jìn)模擬信號(hào)。解決方案為模擬部分ADC模塊和傳感器提供獨(dú)立的、干凈的線性穩(wěn)壓電源如LM7805并與數(shù)字電源在入口處用磁珠或0歐電阻隔離。在ADC的電源引腳就近放置一個(gè)10μF的鉭電容和一個(gè)0.1μF的陶瓷電容進(jìn)行去耦。信號(hào)線干擾長(zhǎng)導(dǎo)線會(huì)像天線一樣接收空間電磁干擾。解決方案使用雙絞線或屏蔽線連接模擬信號(hào)并盡量縮短走線距離。在信號(hào)線上并聯(lián)一個(gè)0.1μF~1μF的電容到地構(gòu)成低通濾波器可以濾除高頻噪聲但要注意電容會(huì)減慢信號(hào)響應(yīng)速度。I2C上拉電阻缺失或不當(dāng)I2C總線需要上拉電阻才能正常工作通常值在2.2kΩ到10kΩ之間根據(jù)總線速度和電容調(diào)整。很多Grove底板或MCU開(kāi)發(fā)板已經(jīng)集成但如果你是自己飛線連接務(wù)必在SDA和SCL線上各接一個(gè)上拉電阻如4.7kΩ到正電源3.3V或5V。接地環(huán)路不合理的接地會(huì)引入地噪聲。確保整個(gè)系統(tǒng)只有一個(gè)主接地點(diǎn)模擬地和數(shù)字地單點(diǎn)連接。軟件濾波硬件無(wú)法完全消除噪聲時(shí)軟件算法是最后一道防線。最簡(jiǎn)單的是一階低通濾波指數(shù)加權(quán)移動(dòng)平均float filtered_value 0; float alpha 0.1; // 濾波系數(shù)0alpha1越小越平滑響應(yīng)越慢 void loop() { int16_t raw ads.readADC_SingleEnded(0); filtered_value (alpha * raw) ((1 - alpha) * filtered_value); // 使用 filtered_value }更復(fù)雜的可以使用中值濾波對(duì)脈沖噪聲有效或卡爾曼濾波。4.2 I2C通信失敗掃描不到設(shè)備如果I2C Scanner找不到設(shè)備請(qǐng)按以下步驟排查檢查物理連接確認(rèn)SDA、SCL、VCC、GND四根線沒(méi)有接錯(cuò)、沒(méi)有虛焊。這是最基礎(chǔ)也最容易出錯(cuò)的一步。檢查電源用萬(wàn)用表測(cè)量模塊VCC和GND之間的電壓確保在芯片工作電壓范圍內(nèi)ADS1115為2.0V-5.5V。檢查上拉電阻如前所述確認(rèn)I2C總線上有上拉電阻??梢杂萌f(wàn)用表測(cè)量SDA/SCL線在空閑時(shí)的電壓如果接近0V說(shuō)明上拉可能沒(méi)起作用。確認(rèn)I2C地址檢查模塊上ADDR引腳的接法確認(rèn)你代碼中使用的地址與之匹配。如果模塊地址被意外配置為其他值掃描時(shí)就需要尋找對(duì)應(yīng)的地址。降低I2C時(shí)鐘頻率有些MCU的I2C默認(rèn)速度較快如400kHz可能在某些布線條件下不穩(wěn)定。嘗試在初始化時(shí)降低速度例如在Arduino的Wire.begin()后調(diào)用Wire.setClock(100000)設(shè)置為標(biāo)準(zhǔn)100kHz模式。4.3 測(cè)量值不準(zhǔn)存在固定偏差或比例錯(cuò)誤如果讀數(shù)有規(guī)律的不準(zhǔn)可能是以下原因增益設(shè)置與輸入電壓不匹配如果你輸入的電壓超過(guò)了當(dāng)前增益下的量程FSRADC輸出會(huì)飽和始終輸出最大值或最小值。例如在增益為16±0.256V時(shí)輸入了1V電壓讀數(shù)就會(huì)一直是最值。解決方案根據(jù)待測(cè)信號(hào)的最大預(yù)估電壓選擇合適的增益。寧可選小一點(diǎn)的增益量程大也別讓信號(hào)飽和。參考電壓誤差A(yù)DS1115使用內(nèi)部基準(zhǔn)雖然精度很高但仍有個(gè)體差異和溫漂。對(duì)于要求極高的應(yīng)用可以考慮使用帶外部基準(zhǔn)電壓輸入的ADC芯片或者用軟件進(jìn)行兩點(diǎn)校準(zhǔn)。分壓電阻精度如果你在ADC前端使用了電阻分壓電路來(lái)測(cè)量高于量程的電壓比如用兩個(gè)電阻將12V分壓到3.3V以內(nèi)那么分壓電阻1%甚至5%的精度誤差會(huì)直接傳遞到測(cè)量結(jié)果中。務(wù)必使用高精度如0.1%的金屬膜電阻。4.4 多設(shè)備組網(wǎng)時(shí)的地址沖突與總線負(fù)載當(dāng)你需要連接多個(gè)I2C設(shè)備比如多個(gè)ADC、OLED屏幕、IMU傳感器時(shí)需要注意地址沖突確保總線上每個(gè)I2C設(shè)備的地址都是唯一的。ADS1115模塊可以通過(guò)ADDR引腳改變地址請(qǐng)根據(jù)模塊手冊(cè)或絲印正確連接ADDR到GND、VCC或其他電平以設(shè)置不同的地址。總線電容與上拉電阻總線上的設(shè)備越多連接線越長(zhǎng)總線的對(duì)地電容就越大。過(guò)大的電容會(huì)導(dǎo)致信號(hào)邊沿變緩可能引起通信錯(cuò)誤。根據(jù)I2C規(guī)范總線電容最大不能超過(guò)400pF。解決方案縮短走線使用更粗的導(dǎo)線。同時(shí)總線電容增大了就需要減小上拉電阻值以提供更強(qiáng)的上拉電流加快上升沿??梢試L試將上拉電阻從4.7kΩ減小到2.2kΩ但注意不能太小否則電流過(guò)大會(huì)超過(guò)芯片的驅(qū)動(dòng)能力。電源管理所有設(shè)備最好由同一個(gè)電源供電保證地電位一致。如果設(shè)備間電壓不同如5V和3.3V必須使用雙向電平轉(zhuǎn)換器而不能簡(jiǎn)單地用分壓電阻因?yàn)榉謮弘娮钑?huì)破壞I2C總線的雙向開(kāi)漏結(jié)構(gòu)。5. 超越基礎(chǔ)在復(fù)雜項(xiàng)目中的系統(tǒng)集成思路掌握了單個(gè)模塊的使用后我們可以將其融入更復(fù)雜的系統(tǒng)中。這里分享兩個(gè)我經(jīng)歷過(guò)的項(xiàng)目思路。5.1 構(gòu)建分布式傳感器數(shù)據(jù)采集節(jié)點(diǎn)在一個(gè)農(nóng)業(yè)大棚環(huán)境監(jiān)控項(xiàng)目中我需要監(jiān)測(cè)十幾個(gè)點(diǎn)的土壤濕度、光照度和空氣溫濕度。每個(gè)點(diǎn)的傳感器模擬輸出都搭配一個(gè)Grove I2C ADC模塊和一個(gè)超低功耗的微控制器比如ATtiny85或ESP8266 deep sleep模式構(gòu)成一個(gè)采集節(jié)點(diǎn)。節(jié)點(diǎn)的工作流程是微控制器大部分時(shí)間休眠定時(shí)喚醒 - 通過(guò)I2C讀取ADC模塊上連接的多個(gè)傳感器數(shù)據(jù) - 將數(shù)據(jù)打包 - 通過(guò)無(wú)線模塊如LoRa或藍(lán)牙發(fā)送回中央網(wǎng)關(guān)。這樣做的好處是布線簡(jiǎn)單每個(gè)節(jié)點(diǎn)只需要電源線和天線無(wú)需拉長(zhǎng)長(zhǎng)的模擬信號(hào)線避免了信號(hào)衰減和干擾。靈活性高節(jié)點(diǎn)可以隨意布置、移動(dòng)??煽啃詮?qiáng)單個(gè)節(jié)點(diǎn)故障不影響整個(gè)系統(tǒng)。在這個(gè)架構(gòu)中Grove I2C ADC模塊扮演了“模擬信號(hào)數(shù)字化前端”的角色它的高精度和低功耗特性ADS1115在單次轉(zhuǎn)換模式下功耗極低非常適合電池供電的遠(yuǎn)端節(jié)點(diǎn)。5.2 與高級(jí)數(shù)據(jù)處理單元如樹(shù)莓派協(xié)同工作雖然Arduino很好用但在需要復(fù)雜邏輯、網(wǎng)絡(luò)通信或圖像處理的場(chǎng)景樹(shù)莓派這樣的Linux單板機(jī)是更好的選擇。然而樹(shù)莓派的一個(gè)“短板”是它沒(méi)有內(nèi)置的模擬輸入引腳所有GPIO都是數(shù)字的。這時(shí)Grove I2C ADC模塊就成了連接樹(shù)莓派和模擬世界的完美橋梁。在樹(shù)莓派上使用Python操作I2C設(shè)備非常方便。你可以使用smbus2或Adafruit_CircuitPython_ADS1x15庫(kù)。流程同樣是初始化I2C總線、配置ADS1115寄存器、讀取數(shù)據(jù)。一個(gè)典型的Python讀取示例片段如下import board import busio import adafruit_ads1x15.ads1115 as ADS from adafruit_ads1x15.analog_in import AnalogIn # 創(chuàng)建I2C總線 i2c busio.I2C(board.SCL, board.SDA) # 創(chuàng)建ADS1115對(duì)象 ads ADS.ADS1115(i2c, address0x48) # 創(chuàng)建模擬輸入通道 chan AnalogIn(ads, ADS.P0) # 對(duì)應(yīng)A0 print(fRaw ADC Value: {chan.value}) print(fVoltage: {chan.voltage:.3f}V)將高精度的模擬數(shù)據(jù)采集交給ADS1115復(fù)雜的數(shù)據(jù)處理、存儲(chǔ)、展示和網(wǎng)絡(luò)上傳交給樹(shù)莓派兩者通過(guò)I2C高效協(xié)作構(gòu)成了一個(gè)能力強(qiáng)大的物聯(lián)網(wǎng)數(shù)據(jù)終端。從最初為了解決引腳和精度問(wèn)題而尋找方案到后來(lái)在多個(gè)項(xiàng)目中信賴地使用Grove I2C ADC模塊已經(jīng)成了我工具箱里的??汀K膬r(jià)值不在于有多復(fù)雜而在于它精準(zhǔn)地解決了一個(gè)普遍存在的痛點(diǎn)并且以Grove生態(tài)特有的易用性降低了使用門檻。對(duì)于初學(xué)者它能讓你避開(kāi)模擬電路最初的泥潭快速獲得穩(wěn)定的數(shù)據(jù)對(duì)于資深開(kāi)發(fā)者它可靠的性能和靈活的配置足以應(yīng)對(duì)大多數(shù)中等要求的精密測(cè)量場(chǎng)景。下次當(dāng)你的項(xiàng)目需要“聽(tīng)聽(tīng)”模擬世界的聲音時(shí)不妨試試這個(gè)安靜而精準(zhǔn)的伙伴。

相關(guān)新聞

PCA9685 PWM驅(qū)動(dòng)器:16通道舵機(jī)/LED控制解決方案與Arduino實(shí)戰(zhàn)

PCA9685 PWM驅(qū)動(dòng)器:16通道舵機(jī)/LED控制解決方案與Arduino實(shí)戰(zhàn)

1. 項(xiàng)目概述:為什么你需要一個(gè)16通道的PWM驅(qū)動(dòng)器?如果你玩過(guò)Arduino控制舵機(jī)或者LED燈帶,大概率會(huì)遇到一個(gè)頭疼的問(wèn)題:板子上的PWM引腳不夠用。Arduino Uno只有6個(gè)數(shù)字PWM引腳,就算全用上,想做個(gè)多關(guān)節(jié)的機(jī)…

2026/8/2 10:15:21 閱讀更多
馮·諾依曼與哈佛架構(gòu):從原理到實(shí)戰(zhàn)的深度解析與選型指南

馮·諾依曼與哈佛架構(gòu):從原理到實(shí)戰(zhàn)的深度解析與選型指南

1. 項(xiàng)目概述:兩種經(jīng)典架構(gòu)的“靈魂”之爭(zhēng)在計(jì)算機(jī)的世界里,架構(gòu)是它的靈魂。我們每天都在和計(jì)算機(jī)打交道,從手機(jī)到服務(wù)器,但你是否想過(guò),這些設(shè)備處理指令和數(shù)據(jù)的方式,其實(shí)源于幾十年前的一場(chǎng)設(shè)計(jì)哲學(xué)之爭(zhēng)&…

2026/8/2 10:15:21 閱讀更多
芯片工藝節(jié)點(diǎn)背后的真相:從晶體管密度到PPA平衡的全面解析

芯片工藝節(jié)點(diǎn)背后的真相:從晶體管密度到PPA平衡的全面解析

1. 芯片制造工藝:從“納米”數(shù)字到真實(shí)性能的橋梁每次看到手機(jī)發(fā)布會(huì)上,廠商們爭(zhēng)相宣傳“我們采用了最新的3nm工藝制程”,你是不是也會(huì)好奇,這個(gè)“3nm”到底意味著什么?它和隔壁廠商的“4nm”相比,強(qiáng)在哪里…

2026/8/2 10:05:21 閱讀更多
WSaiOS應(yīng)用工程實(shí)踐WSaiOS Application Engineering Practice

WSaiOS應(yīng)用工程實(shí)踐WSaiOS Application Engineering Practice

第九卷WSaiOS應(yīng)用工程實(shí)踐WSaiOS Application Engineering Practice第十章WSaiOS應(yīng)用工程發(fā)展方向WSaiOS Application Engineering Future Development10.1 項(xiàng)目概述WSaiOS應(yīng)用工程發(fā)展方向,是對(duì)WSaiOS應(yīng)用體系未來(lái)擴(kuò)展路徑的規(guī)劃。經(jīng)過(guò)前面多個(gè)工程系統(tǒng)建設(shè)&#x…

2026/8/2 11:15:23 閱讀更多
植物大戰(zhàn)僵尸創(chuàng)意工坊模組:僵尸視角塔防與最高難度挑戰(zhàn)

植物大戰(zhàn)僵尸創(chuàng)意工坊模組:僵尸視角塔防與最高難度挑戰(zhàn)

這次我們來(lái)看一個(gè)基于《植物大戰(zhàn)僵尸》的創(chuàng)意工坊項(xiàng)目——"僵尸大戰(zhàn)植物★創(chuàng)意工坊★諾亞實(shí)況★最高難度★【PI】"。這個(gè)項(xiàng)目不是簡(jiǎn)單的游戲模組,而是完全顛覆原版玩法的創(chuàng)意作品,讓玩家可以體驗(yàn)僵尸視角的塔防對(duì)戰(zhàn)。 最值得關(guān)注的是這個(gè)項(xiàng)目…

2026/8/2 11:15:23 閱讀更多
Cadence Allegro實(shí)戰(zhàn):8層高速板DDR模塊布局布線完整流程解析

Cadence Allegro實(shí)戰(zhàn):8層高速板DDR模塊布局布線完整流程解析

這次我們來(lái)看一個(gè)針對(duì)高速PCB設(shè)計(jì)中DDR模塊布局布線的實(shí)戰(zhàn)教程。這個(gè)項(xiàng)目不是講理論,而是直接帶你走一遍完整的8層板設(shè)計(jì)流程,從布局規(guī)劃到信號(hào)完整性約束,再到最后的布線完成。如果你正在用Cadence Allegro做高速板設(shè)計(jì),特別是涉…

2026/8/2 11:15:23 閱讀更多
VCF私有云中自簽名證書配置全攻略:從原理到PAIS部署實(shí)踐

VCF私有云中自簽名證書配置全攻略:從原理到PAIS部署實(shí)踐

1. 項(xiàng)目概述與核心痛點(diǎn) 最近在幫一個(gè)醫(yī)療信息化團(tuán)隊(duì)部署一套基于VMware Cloud Foundation(VCF)的私有AI服務(wù)(Private AI Services, 簡(jiǎn)稱PAIS)環(huán)境。這個(gè)環(huán)境主要用于處理一些敏感的醫(yī)療數(shù)據(jù)分析和模型訓(xùn)練,…

2026/8/2 11:15:23 閱讀更多
本地部署情感對(duì)話AI:從環(huán)境搭建到API集成的完整實(shí)踐指南

本地部署情感對(duì)話AI:從環(huán)境搭建到API集成的完整實(shí)踐指南

這次我們來(lái)看一個(gè)名為“我將親自安慰你”的項(xiàng)目。這個(gè)名字聽(tīng)起來(lái)很特別,但它本質(zhì)上是一個(gè)專注于情感陪伴與對(duì)話的AI應(yīng)用。在技術(shù)層面,它通常意味著一個(gè)本地部署的、能夠進(jìn)行多輪情感化對(duì)話的語(yǔ)言模型或智能體。對(duì)于開(kāi)發(fā)者、AI愛(ài)好者或?qū)€(gè)性化聊天機(jī)器人…

2026/8/2 11:05:23 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書,視頻號(hào)上,賺錢從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書,視頻號(hào)上,賺錢從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多