树莓派 pico lora 测试
UART0 回环热身测试from machine import UART, Pin import time # Raspberry Pi Pico UART0 default pins: # GP0 UART0 TX # GP1 UART0 RX # For loopback test, connect GP0 directly to GP1. uart0 UART( 0, baudrate115200, txPin(0), rxPin(1), bits8, parityNone, stop1, ) counter 0 print(Pico UART0 loopback test) print(Wire GP0/TX to GP1/RX, baudrate 115200) while True: tx_data UART0 loopback test #{:04d}\r\n.format(counter) uart0.write(tx_data) print(TX:, tx_data.strip()) time.sleep_ms(100) if uart0.any(): rx_data uart0.read() try: print(RX:, rx_data.decode().strip()) except UnicodeError: print(RX bytes:, rx_data) else: print(RX: no data, check GP0-GP1 wire) counter 1 time.sleep(1)lora通信测试# SX1262 Universal MicroPython Demo for Waveshare Pico-LoRa-SX1262 / RP2040-LoRa # Save this file to the board as main.py, or run it directly from Thonny / mpremote. # Tested logic is merged from the two Waveshare-style direct-command demos. from machine import Pin, SPI import time import sys # # 1. Change these settings first # MODE tx # tx or rx BOARD pico_lora_sx1262 # pico_lora_sx1262, rp2040_lora FREQUENCY_HZ 865000000 # TX and RX must be the same, for example 433000000 / 470000000 / 868000000 / 915000000 TX_POWER_DBM 22 # SX1262 high-power PA, max 22 dBm # TCXO_MODE: # board use default value in BOARD_CONFIGS # off do not send SetDio3AsTcxoCtrl # 1v7 DIO3 TCXO 1.7 V, 5 ms # 3v3 DIO3 TCXO 3.3 V, 5 ms TCXO_MODE board DEBUG True TX_INTERVAL_MS 2000 RX_REARM_MS 10000 # Re-enter RX if no packet arrives for this long SPI_BAUDRATE 1000000 # Start stable first; after OK you may try 4_000_000 MAX_PAYLOAD_LEN 64 # LoRa parameters. TX and RX must be identical. LORA_SF 7 # 5..12 LORA_BW 4 # SX126x code: 4125kHz, 5250kHz, 6500kHz LORA_CR 1 # 14/5, 24/6, 34/7, 44/8 LORA_PREAMBLE 8 LORA_CRC 1 # 1CRC on, 0CRC off LORA_IQ 0 # 0normal, 1inverted SYNC_WORD_MODE private # private for point-to-point, public for LoRaWAN style sync word # If BOARDcustom, edit this section only. CUSTOM_PINS { spi_id: 1, nss: 13, sck: 14, mosi: 15, miso: 24, dio1: 16, busy: 18, reset: 23, ant_sw: 17, # None if the board has no external antenna switch GPIO ant_tx: 0, # antenna switch level for TX ant_rx: 1, # antenna switch level for RX tcxo: off, # off, 1v7, or 3v3 reset_release: input # input or high } # # 2. Board pin presets # BOARD_CONFIGS { # Waveshare Pico-LoRa-SX1262 style board / left module from your picture. # The original demo uses TCXO 1.7 V by default. pico_lora_sx1262: { spi_id: 1, nss: 3, sck: 10, mosi: 11, miso: 12, dio1: 20, busy: 2, reset: 15, ant_sw: None, ant_tx: 0, ant_rx: 1, tcxo: 1v7, reset_release: input, }, # Waveshare RP2040-LoRa style board / right module from your picture. # Your later program keeps TCXO off by default and has a separate ANT_SW pin. rp2040_lora: { spi_id: 1, nss: 13, sck: 14, mosi: 15, miso: 24, dio1: 16, busy: 18, reset: 23, ant_sw: 17, ant_tx: 0, ant_rx: 1, tcxo: off, reset_release: input, }, # Aliases matching your old program names. left: None, right: None, # User-defined custom board. custom: CUSTOM_PINS, } BOARD_CONFIGS[left] BOARD_CONFIGS[pico_lora_sx1262] BOARD_CONFIGS[right] BOARD_CONFIGS[rp2040_lora] # # 3. SX1262 constants # RADIO_GET_STATUS 0xC0 RADIO_WRITE_REGISTER 0x0D RADIO_READ_REGISTER 0x1D RADIO_WRITE_BUFFER 0x0E RADIO_READ_BUFFER 0x1E RADIO_SET_STANDBY 0x80 RADIO_SET_TX 0x83 RADIO_SET_RX 0x82 RADIO_SET_PACKETTYPE 0x8A RADIO_SET_RFFREQUENCY 0x86 RADIO_SET_TXPARAMS 0x8E RADIO_SET_PACONFIG 0x95 RADIO_SET_BUFFERBASEADDRESS 0x8F RADIO_SET_MODULATIONPARAMS 0x8B RADIO_SET_PACKETPARAMS 0x8C RADIO_GET_RXBUFFERSTATUS 0x13 RADIO_GET_PACKETSTATUS 0x14 RADIO_GET_ERROR 0x17 RADIO_CFG_DIOIRQ 0x08 RADIO_GET_IRQSTATUS 0x12 RADIO_CLR_IRQSTATUS 0x02 RADIO_CALIBRATE 0x89 RADIO_CALIBRATEIMAGE 0x98 RADIO_SET_REGULATORMODE 0x96 RADIO_CLR_ERROR 0x07 RADIO_SET_TCXOMODE 0x97 RADIO_SET_RFSWITCHMODE 0x9D RADIO_SET_STOPRXTIMERONPREAMBLE 0x9F RADIO_SET_LORASYMBTIMEOUT 0xA0 PACKET_TYPE_LORA 0x01 STDBY_RC 0x00 USE_DCDC 0x01 RADIO_RAMP_40_US 0x02 IRQ_TX_DONE 0x0001 IRQ_RX_DONE 0x0002 IRQ_PREAMBLE_DETECTED 0x0004 IRQ_SYNCWORD_VALID 0x0008 IRQ_HEADER_VALID 0x0010 IRQ_HEADER_ERROR 0x0020 IRQ_CRC_ERROR 0x0040 IRQ_CAD_DONE 0x0080 IRQ_CAD_DETECTED 0x0100 IRQ_RX_TX_TIMEOUT 0x0200 IRQ_ALL 0xFFFF REG_LR_SYNCWORD 0x0740 REG_IQ_POLARITY_SETUP 0x0736 REG_TX_MODULATION 0x0889 REG_TX_CLAMP_CONFIG 0x08D8 REG_OCP 0x08E7 PUBLIC_SYNCWORD 0x3444 PRIVATE_SYNCWORD 0x1424 # # 4. Driver # class SX1262: def __init__(self, board_name, pins, quietFalse): self.board_name board_name self.pins pins self.quiet quiet self.spi SPI( pins[spi_id], baudrateSPI_BAUDRATE, polarity0, phase0, bits8, firstbitSPI.MSB, sckPin(pins[sck]), mosiPin(pins[mosi]), misoPin(pins[miso]), ) self.nss Pin(pins[nss], Pin.OUT, value1) self.busy Pin(pins[busy], Pin.IN) self.dio1 Pin(pins[dio1], Pin.IN) self.reset_pin Pin(pins[reset], Pin.OUT, value1) self.ant_sw Pin(pins[ant_sw], Pin.OUT, value0) if pins.get(ant_sw) is not None else None def log(self, *args): if DEBUG and not self.quiet: print(*args) def wait_busy(self, timeout_ms1000): start time.ticks_ms() while self.busy.value(): if time.ticks_diff(time.ticks_ms(), start) timeout_ms: raise RuntimeError(SX1262 BUSY timeout, check BOARD setting and BUSY pin) time.sleep_ms(1) def xfer(self, data): tx bytes(data) rx bytearray(len(tx)) self.nss.value(0) self.spi.write_readinto(tx, rx) self.nss.value(1) return rx def write_cmd(self, cmd, data()): self.wait_busy() self.nss.value(0) self.spi.write(bytes([cmd]) bytes(data)) self.nss.value(1) if cmd ! 0x84: self.wait_busy() def read_cmd(self, cmd, size): self.wait_busy() rx self.xfer([cmd, 0x00] [0x00] * size) self.wait_busy() return bytes(rx[2:]) def write_reg(self, addr, data): if isinstance(data, int): data [data] self.write_cmd(RADIO_WRITE_REGISTER, [(addr 8) 0xFF, addr 0xFF] list(data)) def read_reg(self, addr, size1): self.wait_busy() rx self.xfer([RADIO_READ_REGISTER, (addr 8) 0xFF, addr 0xFF, 0x00] [0x00] * size) self.wait_busy() data bytes(rx[4:]) return data[0] if size 1 else data def write_buffer(self, offset, data): self.write_cmd(RADIO_WRITE_BUFFER, [offset] list(data)) def read_buffer(self, offset, size): self.wait_busy() rx self.xfer([RADIO_READ_BUFFER, offset, 0x00] [0x00] * size) self.wait_busy() return bytes(rx[3:]) def reset_radio(self): self.reset_pin.init(Pin.OUT, value0) time.sleep_ms(20) if self.pins.get(reset_release, input) high: self.reset_pin.init(Pin.OUT, value1) else: self.reset_pin.init(Pin.IN) time.sleep_ms(20) self.wait_busy() def get_status(self): self.wait_busy() rx self.xfer([RADIO_GET_STATUS, 0x00]) self.wait_busy() return rx[1] def get_errors(self): data self.read_cmd(RADIO_GET_ERROR, 2) return (data[0] 8) | data[1] def clear_errors(self): self.write_cmd(RADIO_CLR_ERROR, [0x00, 0x00]) def freq_to_pll(self, freq_hz): return (freq_hz 25) // 32000000 def set_frequency(self, freq_hz): if freq_hz 900000000: cal [0xE1, 0xE9] elif freq_hz 850000000: cal [0xD7, 0xDB] elif freq_hz 770000000: cal [0xC1, 0xC5] elif freq_hz 460000000: cal [0x75, 0x81] else: cal [0x6B, 0x6F] self.write_cmd(RADIO_CALIBRATEIMAGE, cal) pll self.freq_to_pll(freq_hz) self.write_cmd(RADIO_SET_RFFREQUENCY, [ (pll 24) 0xFF, (pll 16) 0xFF, (pll 8) 0xFF, pll 0xFF, ]) def set_dio_irq(self, irq_mask, dio1_mask): self.write_cmd(RADIO_CFG_DIOIRQ, [ (irq_mask 8) 0xFF, irq_mask 0xFF, (dio1_mask 8) 0xFF, dio1_mask 0xFF, 0x00, 0x00, 0x00, 0x00, ]) def get_irq(self): data self.read_cmd(RADIO_GET_IRQSTATUS, 2) return (data[0] 8) | data[1] def clear_irq(self, maskIRQ_ALL): self.write_cmd(RADIO_CLR_IRQSTATUS, [(mask 8) 0xFF, mask 0xFF]) def get_rx_buffer_status(self): data self.read_cmd(RADIO_GET_RXBUFFERSTATUS, 2) return data[0], data[1] def get_packet_status(self): data self.read_cmd(RADIO_GET_PACKETSTATUS, 3) rssi_pkt -data[0] // 2 snr_pkt data[1] if snr_pkt 0x80: snr_pkt - 256 snr_pkt (snr_pkt 2) // 4 signal_rssi -data[2] // 2 return rssi_pkt, snr_pkt, signal_rssi def set_lora_packet_params(self, payload_len): self.write_cmd(RADIO_SET_PACKETPARAMS, [ (LORA_PREAMBLE 8) 0xFF, LORA_PREAMBLE 0xFF, 0x00, # explicit header payload_len 0xFF, LORA_CRC, LORA_IQ, ]) def set_tcxo(self): mode TCXO_MODE if mode board: mode self.pins.get(tcxo, off) if mode off: return elif mode 1v7: self.write_cmd(RADIO_SET_TCXOMODE, [0x01, 0x00, 0x01, 0x40]) time.sleep_ms(5) elif mode 3v3: self.write_cmd(RADIO_SET_TCXOMODE, [0x07, 0x00, 0x01, 0x40]) time.sleep_ms(5) else: raise ValueError(TCXO_MODE must be board/off/1v7/3v3) def set_ant_tx(self): if self.ant_sw is not None: self.ant_sw.value(self.pins.get(ant_tx, 0)) def set_ant_rx(self): if self.ant_sw is not None: self.ant_sw.value(self.pins.get(ant_rx, 1)) def setup_radio(self): self.reset_radio() self.log(board , self.board_name, pins , self.pins) self.log(status after reset 0x%02X busy%d % (self.get_status(), self.busy.value())) self.clear_errors() self.write_cmd(RADIO_SET_STANDBY, [STDBY_RC]) self.set_tcxo() self.write_cmd(RADIO_CALIBRATE, [0x7F]) time.sleep_ms(10) self.clear_errors() self.write_cmd(RADIO_SET_REGULATORMODE, [USE_DCDC]) self.write_cmd(RADIO_SET_RFSWITCHMODE, [0x01]) self.write_cmd(RADIO_SET_BUFFERBASEADDRESS, [0x00, 0x00]) self.write_cmd(RADIO_SET_PACKETTYPE, [PACKET_TYPE_LORA]) self.write_cmd(RADIO_SET_STOPRXTIMERONPREAMBLE, [0x00]) self.set_frequency(FREQUENCY_HZ) low_data_rate_opt 1 if ((LORA_BW 4 and LORA_SF in (11, 12)) or (LORA_BW 5 and LORA_SF 12)) else 0 self.write_cmd(RADIO_SET_MODULATIONPARAMS, [LORA_SF, LORA_BW, LORA_CR, low_data_rate_opt]) self.set_lora_packet_params(MAX_PAYLOAD_LEN) sync_word PUBLIC_SYNCWORD if SYNC_WORD_MODE public else PRIVATE_SYNCWORD self.write_reg(REG_LR_SYNCWORD, [(sync_word 8) 0xFF, sync_word 0xFF]) # Semtech SX126x workaround registers used by the original examples. self.write_reg(REG_IQ_POLARITY_SETUP, self.read_reg(REG_IQ_POLARITY_SETUP) | (1 2)) self.write_reg(REG_TX_MODULATION, self.read_reg(REG_TX_MODULATION) | (1 2)) self.write_reg(REG_TX_CLAMP_CONFIG, self.read_reg(REG_TX_CLAMP_CONFIG) | (0x0F 1)) self.write_reg(REG_OCP, 0x38) self.write_cmd(RADIO_SET_PACONFIG, [0x04, 0x07, 0x00, 0x01]) self.write_cmd(RADIO_SET_TXPARAMS, [TX_POWER_DBM 0xFF, RADIO_RAMP_40_US]) self.clear_irq() self.log(status after setup 0x%02X errors0x%04X % (self.get_status(), self.get_errors())) def send_packet(self, payload): if isinstance(payload, str): payload payload.encode() if len(payload) 255: raise ValueError(payload too long) self.set_ant_tx() self.write_cmd(RADIO_SET_STANDBY, [STDBY_RC]) self.set_dio_irq(IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT, IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT) self.set_lora_packet_params(len(payload)) self.clear_irq() self.write_buffer(0x00, payload) self.write_cmd(RADIO_SET_TX, [0x00, 0x00, 0x00]) start time.ticks_ms() while True: irq self.get_irq() if irq IRQ_TX_DONE: self.clear_irq(irq) print(TX done:, payload) return True if irq IRQ_RX_TX_TIMEOUT: self.clear_irq(irq) print(TX timeout) return False if time.ticks_diff(time.ticks_ms(), start) 5000: print(TX wait timeout irq0x%04X status0x%02X errors0x%04X busy%d % (irq, self.get_status(), self.get_errors(), self.busy.value())) return False time.sleep_ms(20) def start_rx(self): self.set_ant_rx() self.write_cmd(RADIO_SET_STANDBY, [STDBY_RC]) self.set_lora_packet_params(MAX_PAYLOAD_LEN) rx_irq IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_HEADER_ERROR | IRQ_CRC_ERROR self.set_dio_irq(rx_irq, rx_irq) self.clear_irq() self.write_cmd(RADIO_SET_RX, [0xFF, 0xFF, 0xFF]) def poll_rx(self): if not self.dio1.value(): return False irq self.get_irq() if irq 0: return False self.clear_irq(irq) if irq 0xFFFF: print(RX irq read is 0xFFFF, check BOARD setting and SX1262 SPI/MISO pins) time.sleep_ms(500) self.start_rx() return False if irq IRQ_RX_DONE: if irq (IRQ_CRC_ERROR | IRQ_HEADER_ERROR): print(RX error irq0x%04X % irq) else: size, offset self.get_rx_buffer_status() payload self.read_buffer(offset, size) rssi, snr, signal_rssi self.get_packet_status() print(RX:, payload, RSSI:, rssi, SNR:, snr, SignalRSSI:, signal_rssi) self.start_rx() return True elif irq IRQ_RX_TX_TIMEOUT: print(RX timeout) self.start_rx() return False # # 5. Board selection and runner # def copy_dict(d): return dict(d) def try_detect_board(): # Auto mode is only a convenience. If detection is unstable, set BOARD manually. candidates [rp2040_lora, pico_lora_sx1262] for name in candidates: try: pins copy_dict(BOARD_CONFIGS[name]) radio SX1262(name, pins, quietTrue) radio.reset_radio() status radio.get_status() # Wrong SPI/MISO often gives 0x00 or 0xFF. if status not in (0x00, 0xFF): print(AUTO BOARD , name, status0x%02X % status) return name, pins else: print(AUTO skip, name, status0x%02X % status) except Exception as e: print(AUTO skip, name, e) raise RuntimeError(Auto detect failed. Set BOARD to pico_lora_sx1262 or rp2040_lora manually.) def get_board_config(): if BOARD auto: return try_detect_board() if BOARD not in BOARD_CONFIGS: raise ValueError(Unknown BOARD: %s % BOARD) return BOARD, copy_dict(BOARD_CONFIGS[BOARD]) def run_tx(radio): radio.setup_radio() count 0 print(SX1262 Universal TX) print(MODE, MODE, BOARD, radio.board_name, FREQ, FREQUENCY_HZ, PINS, radio.pins) while True: radio.send_packet(PING %04d % count) count 1 time.sleep_ms(TX_INTERVAL_MS) def run_rx(radio): radio.setup_radio() rx_count 0 last_rx_or_rearm time.ticks_ms() print(SX1262 Universal RX) print(MODE, MODE, BOARD, radio.board_name, FREQ, FREQUENCY_HZ, PINS, radio.pins) radio.start_rx() while True: if radio.poll_rx(): rx_count 1 last_rx_or_rearm time.ticks_ms() print(RX count:, rx_count) if time.ticks_diff(time.ticks_ms(), last_rx_or_rearm) RX_REARM_MS: print(RX rearm, waiting for packets...) radio.start_rx() last_rx_or_rearm time.ticks_ms() time.sleep_ms(50) def main(): board_name, pins get_board_config() radio SX1262(board_name, pins) if MODE tx: run_tx(radio) elif MODE rx: run_rx(radio) else: raise ValueError(MODE must be tx or rx) try: main() except KeyboardInterrupt: print(Stopped) except Exception as e: print(ERROR:, e) sys.print_exception(e)python -m mpremote connersal_micropython\sx1262_rp2040_main.py :main.py

相关新闻

Codex 推荐安装的 10 个插件:从写代码到做 PPT,一套全搞定 - CSDN格式修复验证3032

Codex 推荐安装的 10 个插件:从写代码到做 PPT,一套全搞定 - CSDN格式修复验证3032

Codex 推荐安装的 10 个插件:从写代码到做 PPT,一套全搞定 如果你只把 Codex 当成“写代码工具”,其实有点浪费。 插件装对以后,它可以读设计稿、整理文档、生成网页、处理表格,还能辅助做封面和 PPT。这份清单按真实工…

2026/7/2 3:38:41阅读更多 →
VP9 编解码器:它是什么、如何工作以及何时使用

VP9 编解码器:它是什么、如何工作以及何时使用

作为谷歌推出的免专利费开源视频编码器,VP9 压缩效率远超普及多年的 H.264,对标 H.265(HEVC)却无繁杂专利授权费用,如今广泛应用于 YouTube、Netflix、Twitch、Meta 等全球头部流媒体平台。 什么是 VP9 编解码器&…

2026/7/2 3:38:41阅读更多 →
亚马逊云科技将投入10亿美元设立全新AI部门

亚马逊云科技将投入10亿美元设立全新AI部门

7月1日讯,当地时间6月30日,美国科技公司亚马逊旗下云计算服务平台亚马逊云科技宣布,将投入10亿美元,约合68亿元人民币,设立全新的人工智能部门。该部门将专门协助客户搭建并落地人工智能系统,重点面向企业在…

2026/7/2 3:33:41阅读更多 →
番茄小说下载器完整指南:构建个人数字图书馆的终极方案

番茄小说下载器完整指南:构建个人数字图书馆的终极方案

番茄小说下载器完整指南:构建个人数字图书馆的终极方案 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾遇到过这样的情况:在番茄小说上找到一部…

2026/7/2 4:53:48阅读更多 →
Attention Sinks and Compression Valleys in LLMs are Two Sides of the Same Coin

Attention Sinks and Compression Valleys in LLMs are Two Sides of the Same Coin

paper: https://arxiv.org/pdf/2510.06477 ICLR 2026 一句话概括 这篇论文想说明:LLM 中的 attention sink 和 compression valley 不是两个孤立现象,而是同一个底层机制的两种表现,这个机制就是 residual stream 中某些 token,尤…

2026/7/2 4:53:48阅读更多 →
操作系统复习(一)

操作系统复习(一)

操作系统复习(一) 记录一下复习。 操作系统中的不确定性 程序运行结果的不确定性执行顺序的不确定性 操作系统的两个基本特征 并发执行资源共享 分时系统 分时系统(Time-Sharing System)是指:一台计算机同时连接多个终…

2026/7/2 4:53:48阅读更多 →
终极指南:NFD云解析如何一键解析20+网盘直链

终极指南:NFD云解析如何一键解析20+网盘直链

终极指南:NFD云解析如何一键解析20网盘直链 【免费下载链接】netdisk-fast-download 聚合多种主流网盘的直链解析下载服务, 一键解析下载,已支持夸克网盘/uc网盘/蓝奏云/蓝奏优享/小飞机盘/123云盘等. 支持文件夹分享解析. 体验地址: https://lz.qaiu.to…

2026/7/2 4:53:48阅读更多 →
AI集群的Scale-out与Scale-up:解构“万卡互联”与“超节点”的网络架构

AI集群的Scale-out与Scale-up:解构“万卡互联”与“超节点”的网络架构

新华三集团解决方案部 郑上闽本文刊于新华三集团《数字化领航》第34期摘要本文系统阐述了AI算力集群中Scale-up与Scale-out网络技术的发展现状、技术特点及应用场景。分析大语言模型对算力的需求呈指数级增长,推动算力加速卡性能提升及多卡互联技术的演进。Scale-u…

2026/7/2 4:53:48阅读更多 →
【课程设计/毕业设计】基于 SpringBoot 的周边文创线上交易服务系统的设计与实现 基于 SpringBoot 的智能手办周边电商管理系统【附源码、数据库、万字文档】

【课程设计/毕业设计】基于 SpringBoot 的周边文创线上交易服务系统的设计与实现 基于 SpringBoot 的智能手办周边电商管理系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/2 4:48:48阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →