ESP8266/32作為AVR編程器(ISP programmer)的使用介紹

ESP8266作為AVR編程器( ISP programmer)的使用介紹


  • 🌿ESP8266自帶庫例程:https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266AVRISP
  • 📍支持ESP8266/32的ESP_AVRISP其它開源工程(個人沒有再去驗證):https://github.com/lbernstone/ESP_AVRISP
  • 🔧 AVR命令行燒錄工具avrdude:https://github.com/avrdudes/avrdude

📘制作流程介紹

  1. 通過Arduino IDE給ESP8266將Arduino_Wifi_AVRISP程序編譯并燒錄進去。讓其成為一個網絡燒錄端口的AVR編程器。
  • esp8266固件庫自帶的例程:
    在這里插入圖片描述
C:\Users\Administrator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266AVRISP\examples\Arduino_Wifi_AVRISP
  • 程序:
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ESP8266AVRISP.h>#ifndef STASSID
#define STASSID "########"//填寫自己的wifi信息
#define STAPSK "********"
#endifconst char* host = "ESP8266-avrisp";
const char* ssid = STASSID;
const char* pass = STAPSK;
const uint16_t port = 328;
const uint8_t reset_pin = 5;ESP8266AVRISP avrprog(port, reset_pin);void setup() {Serial.begin(115200);Serial.println("");Serial.println("Arduino AVR-ISP over TCP");avrprog.setReset(false);  // let the AVR runWiFi.mode(WIFI_STA);WiFi.begin(ssid, pass);while (WiFi.waitForConnectResult() != WL_CONNECTED) {WiFi.begin(ssid, pass);Serial.println("WiFi failed, retrying.");}MDNS.begin(host);MDNS.addService("avrisp", "tcp", port);IPAddress local_ip = WiFi.localIP();Serial.print("IP address: ");Serial.println(local_ip);Serial.println("Use your avrdude:");Serial.print("avrdude -c arduino -p <device> -P net:");Serial.print(local_ip);Serial.print(":");Serial.print(port);Serial.println(" -t # or -U ...");// listen for avrdudesavrprog.begin();
}void loop() {static AVRISPState_t last_state = AVRISP_STATE_IDLE;AVRISPState_t new_state = avrprog.update();if (last_state != new_state) {switch (new_state) {case AVRISP_STATE_IDLE:{Serial.printf("[AVRISP] now idle\r\n");// Use the SPI bus for other purposesbreak;}case AVRISP_STATE_PENDING:{Serial.printf("[AVRISP] connection pending\r\n");// Clean up your other purposes and prepare for programming modebreak;}case AVRISP_STATE_ACTIVE:{Serial.printf("[AVRISP] programming mode\r\n");// Stand by for completionbreak;}}last_state = new_state;}// Serve the clientif (last_state != AVRISP_STATE_IDLE) { avrprog.serve(); }if (WiFi.status() == WL_CONNECTED) { MDNS.update(); }
}
  1. 程序燒錄后查看ESP8266/32的網絡IP地址和端口號:net:192.168.0.104:328
    在這里插入圖片描述
  • ?需要注意:ESP8266/32設備的網絡IP段必須同電腦端的IP同段,只要電腦端所連接的WiFi與ESP8266/32設備在同一個路由器上一般沒有問題。如果不同端的IP地址訪問需要進行電腦設置,具體教程可以網上找相關不同IP地址段訪問方法的內容。
  1. 使用AVR命令行燒錄工具:avrdude燒錄:
  • 通過cmd窗口,定位在avrdude工具文件位置的燒錄方法:
avrdude -CD:\AVR\avrdude-v8.0-windows-x64/avrdude.conf -v -c arduino -p atmega328pb -P net:192.168.0.104:328 -Uflash:w:D:\AVR\avrdude-v8.0-windows-x64/Blink.ino.hex:i

在這里插入圖片描述

  • 通過cmd窗口,在默認位置使用:
D:\AVR\avrdude-v8.0-windows-x64/avrdude -CD:\AVR\avrdude-v8.0-windows-x64/avrdude.conf -v -c arduino -p atmega328pb -P net:192.168.0.104:328 -Uflash:w:D:\AVR\avrdude-v8.0-windows-x64/Blink.ino.hex:i

在這里插入圖片描述

  • 🔗ESP8266制作的AVRISP與燒錄目標AVR單片機連接引腳說明
+-----------+-----------+
| ESP8266   |    AVR    |
+----------------+-----------+
| GPIO12(D6)   | MISO      |
| GPIO13(D7)   | MOSI      |
| GPIO14(D5)   | SCK       |
| GPIO5 (D1)   | RESET     |
+----------------+-----------+
  • 考慮到對ESP8266 IO端口的保護,建議通訊引腳串聯一個1K的電阻。

📘批處理文件燒錄執行文件制作

一般程序燒錄,基本上燒錄工具的文件位置(avrdude)基本都是固定的,只要不重裝系統。我們可以制作一個批處理文件,將批處理文件和要燒錄的程序文件(.hex),放置在同一個文件夾內,雙擊即可完成程序燒錄。這樣可以簡化使用命令行燒錄的操作。

  • 需要根據自己的avrdude文件路徑進行修改。
  • 網絡端口,需要根據自己燒錄的ESP32/8266 AVRISP進行提前設置好。
  • Wifi_AVRISP_Programmer.bat

該批處理默認優先檢索Blink.ino.hex文件下載,而不是Blink.ino.with_bootloader.hex,如果再生產的燒錄文件夾中刪除了``Blink.ino.hex文件,則會加載Blink.ino.with_bootloader.hex下載。

@echo off
setlocal:: 設置 avrdude 路徑和配置文件路徑
set AVRDUDE_PATH=D:\AVR\avrdude-v8.0-windows-x64\avrdude.exe
set CONFIG_PATH=D:\AVR\avrdude-v8.0-windows-x64\avrdude.conf:: 檢查 avrdude.exe 是否存在
if not exist "%AVRDUDE_PATH%" (echo 錯誤:未找到 avrdude 程序,請檢查路徑是否正確pauseexit /b 1
):: 檢查配置文件是否存在
if not exist "%CONFIG_PATH%" (echo 錯誤:未找到 avrdude.conf 配置文件,請檢查路徑是否正確pauseexit /b 1
):: 查找當前目錄下的 .hex 文件
set HEX_FILE=
for %%f in (*.hex) do (set HEX_FILE=%%fgoto :found_hex
):found_hex
if not defined HEX_FILE (echo 錯誤:當前目錄下未找到 .hex 文件pauseexit /b 1
)echo 找到 Hex 文件: %HEX_FILE%
echo 正在燒錄...:: 執行燒錄命令(調整后的格式,確保路徑正確)
"%AVRDUDE_PATH%" -C"%CONFIG_PATH%" -v -c arduino -p atmega328pb -P net:192.168.0.104:328 -Uflash:w:"%CD%\%HEX_FILE%":iif %errorlevel% equ 0 (echo 燒錄成功完成!
) else (echo 燒錄過程中出現錯誤!
)pause
  • ?注意:以上代碼內容,保存時,選擇ANSI編碼格式,不然執行的時候,中文會顯示亂碼。
  • 在生成的燒錄文件夾內,雙擊執行批處理文件,默認選擇Blink.ino.hex燒錄過程:
    在這里插入圖片描述
  • 在生成的燒錄文件夾內,手動刪除了Blink.ino.hex文件后,雙擊執行批處理文件,自動選擇Blink.ino.with_bootloader.hex文件進行燒錄過程:
    在這里插入圖片描述

📒Arduino IDE燒錄文件導出和文件說明

  • Arduino IDE燒錄文件導出方法:
    在這里插入圖片描述
  • 編譯成功后,會在項目文件夾下,自動建立一個build文件夾,如果是AVR單片機,里面會有生成的相關文件:
    在這里插入圖片描述
Blink.ino.hex//不帶Bootloader程序的燒錄文件,文件燒錄后,就不再支持使用串口燒錄,后續再燒錄,只能通過ISP燒錄方式
Blink.ino.with_bootloader.hex//帶Bootloader程序的燒錄文件,文件燒錄后,后續再燒錄,可以繼續使用串口燒錄。
  • Arduino IDE 默認的串口燒錄方式:
    在這里插入圖片描述
  • AVR ISP編程器燒錄方式選擇和燒錄:
    1. 配置編程器
      在這里插入圖片描述
    1. 使用編程上傳:
      在這里插入圖片描述

📘燒錄目標AVR單片機型號ID查詢

  • 🌿AVR單片機型號ID查詢: https://avrdudes.github.io/avrdude/8.0/avrdude_45.html#List-of-Parts
  • ID也就是arduino -p atmega328pb中的atmega328pb,可以填寫為:arduino -p m328pb.如果是ATmega328P型號,可以改寫為m328p

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77037.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

08-JVM 面試題-mk

文章目錄 1.JVM 的各部分組成2.運行時數據區2.1.什么是程序計數器?2.2.你能給我詳細的介紹Java堆嗎?2.3.能不能解釋一下方法區?2.3.1常量池2.3.2.運行時常量池2.4.什么是虛擬機棧?2.4.1.垃圾回收是否涉及棧內存?2.4.2.棧內存分配越大越好嗎?2.4.3.方法內的局部變量是否線…

Vue3 nextTick

nextTick 是 Vue 中非常重要的一個 API&#xff0c;它允許你在 DOM 更新周期后執行延遲回調。 核心源碼位置 Vue3 的 nextTick 實現主要在 packages/runtime-core/src/scheduler.ts 文件中。 基本實現 const resolvedPromise Promise.resolve() as Promise<any> let …

DISCO:利用大型語言模型提取反事實

DISCO: Distilling Counterfactuals with Large Language Models - ACL Anthologyhttps://aclanthology.org/2023.acl-long.302/ 1. 概述 盡管在自然語言處理(NLP)領域針對各種推理任務取得了巨大進展(Wang 等, 2018, 2019a;Xu 等, 2020),但數據集偏差仍然是構建魯棒模型…

【Django】框架-路由系統核心概念解析

1. 最基本路由關系 路由是URL地址與處理邏輯&#xff08;視圖函數&#xff09;的對應關系。 本質&#xff1a;將用戶請求的URL路徑映射到具體的處理程序&#xff08;如Django視圖函數&#xff09;。 示例&#xff1a; # urls.py urlpatterns [ path(home/, views.home_…

理解 results = model(source, stream=True) 的工作原理和優勢

1. 核心概念解析 (1) streamTrue 的作用 生成器模式&#xff1a;當處理視頻或圖像序列時&#xff0c;streamTrue 會將結果包裝成一個 生成器&#xff08;Generator&#xff09;&#xff0c;逐幀生成 Results 對象&#xff0c;而不是一次性返回所有結果。內存優化&#xff1a;…

重新定義“邊緣”:邊緣計算如何重塑人類與數據的關系

在數字化浪潮中&#xff0c;云計算曾是科技界的寵兒&#xff0c;但如今&#xff0c;邊緣計算正在悄然改變游戲規則。它不僅是一種技術進步&#xff0c;更是對人類與數據關系的一次深刻反思。本文將探討邊緣計算如何從“中心化”走向“分布式”&#xff0c;以及它如何在效率、隱…

MCP 協議知識分享

MCP 協議知識分享 一、MCP 協議概述1.1 定義與背景1.2 核心價值1.3 與傳統 API 的對比 二、技術架構與工作原理2.1 核心組件2.2 通信機制2.3 典型工作流程 三、關鍵技術與應用場景3.1 核心技術3.2 典型應用場景 四、與微軟技術的集成4.1 Azure OpenAI 服務4.2 Playwright MCP 服…

策略模式實現 Bean 注入時怎么知道具體注入的是哪個 Bean?

Autowire Resource 的區別 1.來源不同&#xff1a;其中 Autowire 是 Spring2.5 定義的注解&#xff0c;而 Resource 是 Java 定義的注解 2.依賴查找的順序不同&#xff1a; 依賴注入的功能&#xff0c;是通過先在 Spring IoC 容器中查找對象&#xff0c;再將對象注入引入到當…

Linux》》bash 、sh 執行腳本

通常使用shell去運行腳本&#xff0c;兩種方法 》bash xxx.sh 或 bash “xxx.sh” 、sh xxx.sh 或 sh “xxx.sh” 》bash -c “cmd string” 引號不能省略 我們知道 -c 的意思是 command&#xff0c;所以 bash -c 或 sh -c 后面應該跟一個 command。

【解析】ReentrantLock鎖、Syschronized鎖面試點解析

面試官提問 ● 公平鎖與非公平鎖的區別是什么&#xff1f; ● 什么是可重入鎖&#xff1f; ● 什么是死鎖&#xff0c;怎樣避免死鎖&#xff1f; ● ReentrantLock與Syschronized實現原理是什么&#xff1f;兩者有什么區別&#xff1f; ● 請說明ReentrantLock獲取鎖與釋放…

04.Python代碼NumPy-通過索引或切片來訪問和修改

04.Python代碼NumPy-通過索引或切片來訪問和修改 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是Python基礎語法。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性&#xff0c;希望對您有用~ python語法…

跨平臺數據采集如何解決不同平臺之間的數據兼容性問題?

在數字化時代&#xff0c;企業越來越依賴多個信息系統來管理業務&#xff0c;例如ERP&#xff08;企業資源計劃&#xff09;、CRM&#xff08;客戶關系管理&#xff09;、財務管理系統、電商平臺等。然而&#xff0c;在進行跨平臺數據采集時&#xff0c;不同系統之間的數據格式…

解決 vite.config.ts 引入scss 預處理報錯

目錄 報錯1&#xff1a;[plugin:vite:css] [SASS] Error&#xff1a;Cant find stylesheet to import 報錯2&#xff1a;[plugin:vite:css] [sass] Error: Undefined variable 版本號&#xff1a; "sass": "^1.86.3","sass-loader": "^1…

C++筆記,數學函數

參考鏈接&#xff1a;C中數學函數的使用方法_cpp里指數函數-CSDN博客 頭文件 <cmath> 1. 基本的算數運算函數 1.1 sqrt() - 計算平方根 功能&#xff1a;計算一個非負實數的平方根。原型&#xff1a;double sqrt(double x);示例代碼&#xff1a; #include <iostr…

不關“貓”如何改變外網IP?3種免重啟切換IP方案

每次更換外網IP都要重啟路由器&#xff1f;太麻煩了&#xff01;那么&#xff0c;不關貓怎么改變外網IP&#xff1f;無論是為了網絡調試、爬蟲需求&#xff0c;還是解決IP限制問題&#xff0c;頻繁重啟設備既耗時又影響效率。其實&#xff0c;更換外網IP并不一定要依賴“重啟大…

道路運輸安全員企業負責人考試內容與范圍

道路運輸企業主要負責人&#xff08;安全員&#xff09;考證要求 的詳細說明&#xff0c;適用于企業法定代表人、分管安全負責人等需取得的 《道路運輸企業主要負責人和安全生產管理人員安全考核合格證明》&#xff08;交通運輸部要求&#xff09;。 考試內容與范圍 1. 法律法…

深入剖析 WiFi 定位解析功能:原理、技術優勢與應用場景

WiFi 定位解析功能的原理? 信號強度與距離的關系? WiFi 定位的核心原理基于無線信號傳播過程中的一個基本特性&#xff1a;信號強度與信號發射源&#xff08;即 WiFi 接入點&#xff0c;Access Point&#xff0c;簡稱 AP&#xff09;和接收設備之間距離的關聯。一般來說&am…

NVIDIA RTX? GPU 低成本啟動零售 AI 場景開發

零售行業正在探索應用 AI 升級客戶體驗&#xff0c;同時優化內部流程。面對多重應用場景以及成本優化壓力&#xff0c;團隊可采用成本相對可控的方案&#xff0c;來應對多重場景的前期項目預演和落地&#xff0c;避免短期內大規模投入造成的資源浪費。 客戶體驗 AI 場景的研究…

首次打藍橋杯總結(c/c++B組)

目錄 一、對每個題進行總結 1.填空題 2.第一個大題---可分解的正整數&#xff08;10--3&#xff09; 3.第二道大題---產值調整&#xff08;10--3&#xff09; 4.第三道大題---畫展部署&#xff08;15--7&#xff09; 5.第四道大題---水質檢測&#xff08;15--3&#x…

林納斯·托瓦茲:Linux系統之父 Git創始人

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 林納斯托瓦茲&#xff1a;Linux之父、Git創始人 一、傳奇人物的誕生 1. 早年生活與家…