CORE-ESP32C3

2023-11-13

目录

参考博文

源于网友oled+eink+aht10项目

源代码修改及复现说明

主要修改

显示效果

​编辑硬件准备

软件版本

日志及soc下载工具

软件使用

接线说明

天气显示屏

硬件接线

温度采集

日期温度显示屏

正常初始化LOG

示例代码


参考博文:

CORE-ESP32C3|eink|墨水屏日历|天气API|LuatOS公共接口|气象要素数据V1|collectgarbage垃圾回收|LuatOS-SOC接口|官方demo|学习:墨水屏动态日历

CORE-ESP32C3|eink|日期格式化|IO11解锁|墨水屏操作库|SNTP自动同步|局部刷新|全局刷新|LuatOS-SOC接口|官方demo|学习(12):简单日期显示

合宙Air105|摄像头|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB转TTL|官方demo|学习(2-1):摄像头camera-capture_合宙air105的摄像头_打酱油的工程师的博客-CSDN博客

合宙ESP32系列|自定义固件|在线云编译|本地编译|Windows|luat_conf_bsp.h|(2)、CORE-ESP32S3编译_打酱油的工程师的博客-CSDN博客

Lua基础|CORE-ESP32C3|eink|日期格式化|os.date|weekarray|tonumber|SOC固件编译|汉字星期|墨水屏:今天星期几?

源于网友oled+eink+aht10项目:

项目地址:墨水屏天气

源代码修改及复现说明:

该网友的GIT项目实现代码为蓝本,实现墨水屏日历+时间日期+温度动态显示功能。

墨水屏日历的初始功能实现及说明详见:

CORE-ESP32C3|eink|墨水屏日历|天气API|LuatOS公共接口|气象要素数据V1|collectgarbage垃圾回收|LuatOS-SOC接口|官方demo|学习:墨水屏动态日历

基于当前的适配的LuatOS@ESP32C3 base 22.12 bsp V1003 32bit (IDF5)版本,对原主程序中相关代码进行了修正和更新,以实现目标功能。

主要修改:

1、删除硬狗(IDF5暂未适配);

2、eink初始化流程;

3、2个I2C设备分别采用软、硬件I2C接口;

4、http.request接口调整,

5、http连接后自动更新ntp,删除手动更新代码;

6、程序中用到的字符有:

font_opposansm8

font_opposansm8_chinese

font_opposansm12_chinese

底包编译时注意取消相关字体编译注释。

显示效果:

硬件准备

ESP32C3-CORE开发板(经典款)1块,面包板1块,EINK1.54墨水屏,0.91寸oled(SSD1306),AHT10测温模组。

 ​ESP32C3-CORE开发板pinout

 EINK1.54墨水屏

0.91寸OLED(SSD1306)

AHT10温湿度模块

软件版本

CORE-ESP32C3:LuatOS@ESP32C3 base 22.12 bsp V1003 32bit

日志及soc下载工具

luatools 版本:2.1.88

Luatools软件安装目录下存放有各型号的SOC,也可用于刷机。

软件使用

接口文档可参考: eink - 墨水屏操作库

接线说明

天气显示屏

为合宙 1.54寸v2,200x200,快刷屏,SPI标准屏

硬件接线:

显示屏SPI   -->  CORE-ESP32

GND              GND

VCC              3.3V

SCL             (IO02)

SDA             (IO03)

RES             (IO10)

DC              (IO06)

CS              (IO07)

BUSY            (IO11)-IO11默认配置为SPI-FLASH的VDD,需解锁配置为GPIO使用。如不考虑解锁,可选择右侧IO,但后期存在复用冲突风险。

温度采集

使用AHT10模组,I2C接口,

使用板载硬件I2C.FAST端口,

硬件接线:

AHT10(I2C)  -->  CORE-ESP32

GND              GND

VCC              3.3V

SCL              (IO05)

SDA              (IO04)

日期温度显示屏

为0.91寸OLED屏,SSD1306芯片,I2C接口屏,

硬件接线:

OLED显示屏(I2C)    -->  CORE-ESP32

GND              GND

VCC              3.3V

SCL             (IO00)

SDA             (IO01)

Esp2 c3开发板引出一组硬件I2C接口(接入测温模组),故另一组I2C屏幕使用软件模拟I2C。

正常初始化LOG:

示例代码:

PROJECT = "wifidemo"
VERSION = "1.0.0"

--测试支持硬件:ESP32C3
--测试固件版本:LuatOS-SoC_V0003_ESP32C3[_USB].soc

local sys = require "sys"
require("sysplus")

--定义是否使用I2C 的ATH10好 OLED,默认零打开,其余任何字符都是关闭,这里只要Oled_on 不为0  ,就关闭了后面的所有OLED的显示
local on = 0
local off = 1

local ath10_on = on --加上ATH10 运存可能会不够,不需要就自己关了
local oled_on = on --I2C OLED屏幕,买的是ssd1306,不需要就自己关了
local eink_weather = on --水墨屏部分,不需要就自己关了,这里是按照合宙提供的方法解锁了IO11,没解锁的可以把水墨屏对应的针脚飞线插到别的地方,并且修改对应初始化代码即可

-- 兼容V1001固件的
if http == nil and http2 then
    http = http2
end

local rtos_bsp = rtos.bsp()

-- spi_id,pin_reset,pin_dc,pin_cs,pin_busy,mode
function eink_pin()
    if rtos_bsp == "AIR101" then
        return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
    elseif rtos_bsp == "AIR103" then
        return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
    elseif rtos_bsp == "AIR105" then
        return 5,pin.PC12,pin.PE08,pin.PC14,pin.PE09
    elseif rtos_bsp == "ESP32C3" then
        --(spi_id, pin_busy, pin_reset, pin_dc, pin_cs)
        return  2,11,10,6,7
    elseif rtos_bsp == "ESP32S3" then
        return 2,16,15,14,13
    elseif rtos_bsp == "EC618" then
        return 0,1,10,8,18
    else
        log.info("main", "bsp not support")
        return
    end
end

--需要自行填写的东西
--wifi信息
local  wifiName,wifiPassword = "MERCURY_*****", "*******你的wifi密码****"
--地区id,请前往https://api.luatos.org/luatos-calendar/v1/check-city/ 查询自己所在位置的id
local location = "101000000" 
--天气接口信息,需要自己申请,具体参数请参考https://api.luatos.org/ 页面上的描述
--采用天气API:https://tianqiapi.com/
local appid,appsecret = "2754****","3wdK*****"

local function connectWifi()
    log.info("wlan", "wlan_init:", wlan.init())

    wlan.setMode(wlan.STATION)
    wlan.connect(wifiName,wifiPassword,1)

    -- 等待连上路由,此时还没获取到ip
    result, _ = sys.waitUntil("WLAN_STA_CONNECTED")
    log.info("wlan", "WLAN_STA_CONNECTED", result)
    -- 等到成功获取ip就代表连上局域网了
    result, data = sys.waitUntil("IP_READY")
    log.info("wlan", "IP_READY", result, data)
end

local function requestHttp()
    local code, headers, body = http.request("GET","http://apicn.luatos.org:23328/luatos-calendar/v1?mac=111&battery=10&location="..location.."&appid="..appid.."&appsecret="..appsecret).wait()
    if code == 200 then
        return body
    else
        log.info("http get failed",code, headers, body)
        sys.wait(500)
        return ""
    end
end

function refresh()
    log.info("refresh","start!")
    local data
    for i=1,5 do--重试最多五次
        collectgarbage("collect")
        data = requestHttp()
        collectgarbage("collect")
        if #data > 100 then
            break
        end
        log.info("load fail","retry!")
    end
    if #data < 100 then
        log.info("load fail","exit!")
        return
    end
    collectgarbage("collect")
    local  spi_id, pin_busy, pin_reset, pin_dc, pin_cs = eink_pin()
    local  mode =0
    if spi_id then
        eink.model(eink.MODEL_1in54)
        spi.setup(spi_id,nil,0,0,8,20*1000*1000)
        eink.setup(mode, spi_id,pin_busy,pin_reset,pin_dc,pin_cs)
        eink.setWin(200, 200,2)
        --稍微等一会,免得墨水屏没初始化完成
        sys.wait(100)
        eink.clear(1)
        log.info("eink", "end setup")
        eink.drawXbm(0, 0, 200, 200, data)
        -- 刷屏幕
        eink.show()
        eink.sleep()
        log.info("refresh","done")
    end
end

--这里用于后面I2C读值四舍五入,例如
--num1=(aht10_data.RH*100)  --基于小米蓝牙温湿度计比对调的湿度原始数据+/-差异值或者直接修改传感器读取代码,确保串口和屏幕信息一致
--num2=(aht10_data.T)    --基于小米蓝牙温湿度计比对调的温度原始数据+/-差异值或者直接修改传感器读取代码,确保串口和屏幕信息一致
--hum=keepDecimalTest(num1, 2)
--temp=keepDecimalTest(num2, 2)

local function keepDecimalTest(num, n)

    if type(num) ~= "number" then
        return num
    end
  --  n = n or 2
    return string.format("%." .. n .. "f", num)
end

if oled_on == 0 then

    local TAG = "main"

    -- 初始化显示屏

    log.info(TAG, "init ssd1306")

    -- 初始化硬件i2c的ssd1306

    --u8g2.begin({ic = "ssd1306",direction = 0,mode="i2c_hw",i2c_id=0,i2c_speed = i2c.FAST}) -- direction 可选0 90 180 270

    --初始化软件i2c的ssd1306

    u8g2.begin({ic = "ssd1306",direction =180,mode="i2c_sw", i2c_scl=0, i2c_sda=1}) -- 通过PA1 SCL / PA4 SDA模拟

    u8g2.SetFontMode(1)

    u8g2.ClearBuffer()

    u8g2.SetFont(u8g2.font_opposansm8)

    u8g2.DrawUTF8("U8g2+LuatOS", 32, 10)

    u8g2.SetFont(u8g2.font_opposansm12_chinese)

    u8g2.DrawUTF8("中文测试", 40, 38)

    -- u8g2.SetFont(u8g2.font_opposansm8_chinese)

    -- u8g2.DrawUTF8("有内鬼终止止交易", 5, 32)

    u8g2.SendBuffer()

end

--local aht10 = require "aht10"
if ath10_on == 0 then

    aht10 = require "aht10"

    i2cid = 0

    i2c_speed = i2c.FAST

end

sys.taskInit(function()
    --手动设置rtc
    rtc.set({year=2023,mon=2,day=7,hour=21,min=15,sec=43})
    --先连wifi
    connectWifi()
    if eink_weather == 0 then
        refresh()
    end
    local str_month1
    local str_day
    local str_month
    local str_year
    local str_time
    local str_datetime2
    local str_date
    local str_week
    local str_week1 = ""
    local str_week2
    local str_voidhour
    local str_min
    local num3 = 2

    if ath10_on == 0 then

        i2c.setup(i2cid,i2c_speed)

        aht10.init(i2cid)

    end  -- sys.wait(2000)

    while 1 do
        sys.wait(50)

        local str_datetime = os.date()
        str_week = string.sub(str_datetime,1,3)
        str_month = string.sub(str_datetime,5,7)
        str_day = string.sub(str_datetime,9,10)

        if str_week == "Sun" then
            str_week1 = "天"
            str_week2 = 7
        elseif str_week == "Mon" then
            str_week1 = "一"
            str_week2 = 1
        elseif str_week == "Tue" then
            str_week1 = "二"
            str_week2 = 2
        elseif str_week == "Wed" then
            str_week1 = "三"
            str_week2 = 3
        elseif str_week == "Thu" then
            str_week1 = "四"
            str_week2 = 4
        elseif str_week == "Fri" then
            str_week1 = "五"
            str_week2 = 5
        elseif str_week == "Sat" then
            str_week1 = "六"
            str_week2 = 6
        end

        if(str_month=="Jan") then
            str_month1 = "01"
        elseif str_month == "Feb" then
            str_month1 = "02"
        elseif str_month == "Mar" then
            str_month1 = "03"
        elseif str_month == "Apr" then
            str_month1 = "04"
        elseif str_month == "May" then
            str_month1 = "05"
        elseif str_month == "Jun" then
            str_month1 = "06"
        elseif str_month == "Jul" then
            str_month1 = "07"
        elseif str_month == "Aug" then
            str_month1 = "08"
        elseif str_month == "Aep" then
            str_month1 = "09"
        elseif str_month == "Oct" then
            str_month1 = "10"
        elseif str_month == "Nov" then
            str_month1 = "11"
        elseif str_month == "Dec" then
            str_month1 = "12"
        end

        str_year = string.sub(str_datetime,21,24)
        str_time = string.sub(str_datetime,12,20)
        -- log.info("输出:"..str_time)
        str_voidhour = string.sub(str_datetime,15,19) --这里是截取时间数据里面的分和秒

        str_min = string.sub(str_datetime,18,19) --截取秒

        if ath10_on == 0  then

            local aht10_data = aht10.get_data()
            num1=(aht10_data.RH*100)  --基于小米蓝牙温湿度计比对调的湿度原始数据+/-差异值或者直接修改传感器读取代码,确保串口和屏幕信息一致
            num2=(aht10_data.T)    --基于小米蓝牙温湿度计比对调的温度原始数据+/-差异值或者直接修改传感器读取代码,确保串口和屏幕信息一致
            hum=keepDecimalTest(num1, 2)
            temp=keepDecimalTest(num2, 2)
            --u8g2.ClearBuffer() -- 清屏
            --u8g2.SetFont(u8g2.font_opposansm12_chinese)
            --  u8g2.SendBuffer()
        end
           -- 定义OLED刷新
        if oled_on == 0 then
            u8g2.ClearBuffer()
            if ath10_on == 0 then
                u8g2.SetFont(u8g2.font_opposansm8_chinese)
                u8g2.DrawUTF8("温:"..temp.."C'", 0, 60)
                u8g2.DrawUTF8("湿:"..hum.."%", 65,60)
                else
                    u8g2.SetFont(u8g2.font_opposansm8)
                    u8g2.DrawUTF8("U8g2+LuatOS", 30, 60)
            end
            sys.wait(50)
           -- u8g2.SetFont(u8g2.font_opposansm8_chinese)
            u8g2.DrawUTF8(str_year.."-"..str_month1.."-"..str_day,50, 10)
            u8g2.DrawUTF8("星期"..str_week1,5, 10)
           -- sys.wait(50)
            u8g2.SetFont(u8g2.font_opposansm12_chinese)
            u8g2.DrawUTF8(str_time,30, 40)
            u8g2.SendBuffer()
        end
           --u8g2.SetFont(u8g2.font_opposansm12_chinese)
           --u8g2.DrawUTF8("中文测试", 40, 38)
         --  u8g2.SendBuffer()

           -- 定义 水墨屏刷新的时间节点
        if eink_weather == 0 then
           -- if str_min == "59" then --可以每分钟刷新一次
            if str_voidhour == "00:00" or str_voidhour == "30:00" then --每整点或者30分刷新一次
                log.info("1小时准点刷新水墨屏天气")
                log.info(str_year.." "..str_month1.." "..str_day..str_time..str_week1)
             --   后面的代码是为了限制水墨屏在一秒内刷新次数太多,造成RAM拥堵
                num3 = num3 + 1
                print("num3 = "..num3)
                bbb = num3%3
                if bbb == 0 then
                num3 = 1
                if oled_on == 0 then
                    u8g2.ClearBuffer()
                    u8g2.SetFont(u8g2.font_opposansm8_chinese)
                    u8g2.DrawUTF8(str_year.."-"..str_month1.."-"..str_day,50, 10)
                    sys.wait(50)
                    u8g2.DrawUTF8("天气更新中....",35, 40)
                    u8g2.DrawUTF8("星期"..str_week1,5, 10)
                    u8g2.SendBuffer()
                end
                collectgarbage("collect")
                    refresh()
                end
            end
        end
           -- lvgl.label_set_text(label_time,"#00CED1 "..str_year.."-"..str_month1.."-"..str_day.." ##00ff00 " ..str_time.."##90EE90 星期"..str_week1.."#")
            sys.wait(50)
    end
end)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CORE-ESP32C3 的相关文章

  • Air103

    目录 一 在线云编译 二 本地编译 Windows平台用户 如果是Air103 本机为 Air103 如果是Air105 本机为 Air105 定制固件里的库 编译 执行 生成过程及log文件解析 1 生成elf格式 2 按照设置文件设定的
  • C# 提取字体点阵字模数据

    MCU 项目的 GUI 需要显示文字 没找到合适的 于是 用 Visual C 2008 写了一个字模提取程序 目前能导出数据 但还没来得及测试数据正确性 项目托管地址 https github com memstone mosFontTo
  • AWTRIX像素屏时钟搭建

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 AWTRIX像素屏时钟搭建 前言 一 AWTRIX是什么 二 AWTRIX像素屏时钟搭建步骤 1 材料准备 2 ESP8266固件刷写 3 接线方式 4 手机端配网 4 服务
  • 【ISO14229_UDS_0x23服务详解】

    目录 1 0x23服务 根据地址读取内存服务 2 请求报文格式 2 1 请求报文定义 2 2 请求报文中子函数参数定义 2 3 请求报文中数据参数定义 3 肯定应答报文 3 1 肯定应答报文格式定义 3 2 肯定应答报文数据参数定义 4 支
  • esp8266与stm32、手机通讯(原子云)——hal库(有代码)

    本文所讲 正点原子的wifi模块esp8266与正点原子开发板战舰V3 stm32f103zet6 及手机app通讯 esp8266分为三种工作模式 STA 8266连接到网络比如wifi 手机热点等 AP 8266作为热点 由手机连接到8
  • 聊聊FFT

    关于FFT 全称为快速傅里叶变换 目的是把时域的信号转变为频域的信号 具体的科学解释及计算方程组可以去查百度百科 不过小编不建议这么做 因为查了也看不懂的 先看一张都能看懂的图 这是某种食物的配方表 每种配方包含了多少比例标注的很清楚 对于
  • STM32CubeMX学习六 之ADC配置

    文章目录 前言 一 本地环境 二 开始 1 定时器配置 2 引脚配置 在这里插入图片描述 https img blog csdnimg cn e5b6f155a1b8468cb15046a0a9d031cd png 3 内部时钟配置 4 A
  • Keil MDK误将Project窗口关了的解决办法,窗口视图重置

    在使用MDK时 误将Project窗口或者其他窗口关了 点击view 选择对应的窗口即可 或者点击Window窗口 选择Reset View to Defaults 再点击Reset即可实现窗口的重置
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 在雁飞格物平台上创建产品 1 创建产品 2 查看雁飞格物平台接入协议 组成ClientId 组成userName 3 设备鉴权信息 鉴权参数计算 python版 4 MQTT直连雁飞格
  • GPIO口的八种工作状态

    一直对GPIO的工作状态不是很熟悉 导致在设置IO状态时 经常会设置成推挽上拉 或者推挽下拉 开漏上拉等问题 虽然看起来没有影响MCU工作 但感觉这是一种无知的表现 现在总结下GPIO口的八种工作状态 其中四种输入状态 四种输出状态 一 输
  • Keil的软件仿真和硬件仿真

    一 软件仿真 Keil有很强大的软件仿真功能 通过软件仿真可以发现很多将要出现的问题 Keil的仿真可以查看很多硬件相关的寄存器 通过观察这些寄存器值的变化可以知道代码有没有正常运行 这样可以避免频繁下载程序 延长单片机Flash寿命 开始
  • PWM模块:边沿对齐PWM和中心对齐PWM

    PWM模块 边沿对齐PWM和中心对齐PWM 当PWM 时基工作在自由运行模式时 模块产生边沿对齐的PWM 信号 给定PWM 通道的输出1 边沿对齐模式 信号的周期由装入PTPER 的值指定 其占空比由相应的PDCx 寄存器指定 参见图15
  • 【零基础玩转BLDC系列】基于反电动势过零检测法的无刷直流电机控制原理

    无刷直流电动机基本转动原理请参考 基于HALL传感器的无刷直流电机控制原理 基本原理及基础知识本篇不再赘述 目录 反电势过零检测法的原理 反电势过零检测实现方法 位置传感器的存在限制了无刷直流电机在某些特定场合中的应用 如 使电机系统的体积
  • Raspberry Pi 4 I2C 总线无法正常工作

    尽管 i2cDetect 确实检测到目标 但我的 Raspberry Pi 4 Model B 上的 I2C 总线无法正常工作 我尝试使用 Raspberry Pi Sense HAT 和 SSD1306 OLED 显示屏以及带有 I2C
  • MCU平台下确定栈空间大小的方法

    本文介绍MCU平台下确定栈空间大小的方法 通常使用IDE开发MCU程序在生成Image文件时 Image文件被划分为代码区 数据区 BSS区 堆区 栈区 其中 代码区 数据区 BSS区空间大小由编译器最终决定 对于MCU 堆区一般设置为0
  • 在 U-Boot 中使用 I2C 读取多个字节

    我的 Freescale p1022tw 板的 I2C 驱动程序有问题 U Boot 的控制台上有一个从 I2C 设备读取的命令 i2c md chip address 0 1 2 of objects 当我从 id 为 0x60 地址为
  • 如何将 I2C 地址传递给 Adafruit CircuitPython 代码? (运行 ADS1115)

    我正在尝试使用两个 I2C 地址 0x48 0x49 在一个 Raspberry Pi 上运行两个 Adafruit ADS1115 每个设备的地址可以通过将 ADDR 引脚连接为高电平 0x49 或使其悬空 默认为 0x48 来设置 我已
  • 在 Raspberry Pi 上使用 Python smbus - 与语法混淆

    我正在尝试在 Raspberry Pi 上使用 python smbus 使用 I2C 与 MMA7660 加速计芯片进行通信 在下面的代码中 我正在读取芯片的寄存器 0x 00 0x01 0x02 和 0x03 并且我得到的值完全相同 查
  • 将全彩图像转换为三色图像以供电子墨水显示

    我希望能够自动将全彩色图像转换为电子墨水显示屏 Waveshare 7 5 的三色 黑 红 白 现在我只是让屏幕处理它 但随着预期的复杂图像会被冲掉 我可以应用任何算法或过滤器来使事情更加明显吗 现在我正在使用Python 但如果有必要的话
  • 是否有通用 I2C 命令来查看设备是否仍然存在于总线上?

    是否有通用的 I2C 命令来查看设备在初始化一次后是否仍然存在于总线上 例如 OLED 显示器 我问这个的原因是为了避免主程序由于库代码中存在无限循环而冻结 当设备断开连接时 例如 Wire 库 在 MCU 启动时 我想检查设备是否可用 并

随机推荐

  • pymysql中 execute 和 executemany 性能对比,以及与原生SQL 相比如何

    今天在mysql中插入大批量数据时 突然想起pymysql 还有executemany 方法 那么这两个方法到底谁快 快多少 测试环境 python3 mysql pymysql 老规矩 先上测试代码 class IN sql def in
  • [1144]Hive常用日期格式转换

    文章目录 获取当前时间 Hive中处理毫秒级别的时间戳 日期格式转换 返回日期中的年 月 日 时 分 秒 当前的周数 返回当月或当年的第一天 计算日期差值 返回结束日期减去开始日期的天数 返回开始日期startdate增加days天后的日期
  • webpack5 学习(六)—— 管理资源:自定义 JSON 模块 parser

    通过使用 自定义 parser 替代特定的 webpack loader 可以将任何 toml yaml 或 json5 文件作为 JSON 模块导入 在 src 文件夹下创建一个 data toml 一个 data yaml 以及一个 d
  • 矩阵求和

    include
  • 第四十章 Unity 按钮 (Button) UI

    本章节我们介绍一下按钮UI 首先 我们创建一个新的场景 SampleScene3 unity 然后 在菜单栏中点击 GameObject gt UI gt Button 截图如下 我们选中刚刚创建的Button 然后查看它的Inspecto
  • 深度优先搜索——搜索与回溯,从n个数中取出r个数的排列

    5 2 1 include
  • IDFA 单元测试以及单元测试覆盖率步骤

    一 单元测试类 1 新建java类 随意选择java类文件 新建一个Java类CountVowel 用来统计字符串中元音的个数 代码如下 public class CountVowels private static boolean isV
  • JAVA微信公众号

    1 微信公众号介绍 账号分为服务号 订阅号 小程序 服务号和订阅号开发类似 但是申请服务号必须是企业 所以学习的话申请一个订阅号 测试账号即可 2 注册订阅号 第一步 访问 微信公众平台 点击立即注册按钮 第二步 注册类型页面选择订阅号 第
  • 【模型复杂度】torchsummary、torchstat和profile的使用

    模型的复杂度分析也是不同模型比较的重要指标 包括模型参数 浮点运算次数 Floating point operations FLOPs 内存占用和运存占用等 记录一下可以评价模型复杂度的方法 1 torchsummary torchsumm
  • C-结构体

    目录 结构体 定义结构体 第一种方式 定义的同时定义变量名 第三种方式 赋值和初始化 如何取出结构体成员 结构体变量 结构体指针作为函数参数进行传递 结构体运算 结构体 形成了一个新的数据类型 定义结构体 第一种方式 定义一个新的数据类型
  • GD32的项目源码从台式机拷贝到笔记本,烧录后串口数据异常

    目录 1 问题描述 2 故障排查 3 问题分析 4 问题总结 1 问题描述 最近一个项目 需要外场调试 将台式机的源代码拷贝到笔记本中 通过笔记本烧录程序到设备中 发现串口数据异常 重新使用台式机进行烧录 则设备输出正常 2 故障排查 由于
  • 系统架构设计高级技能 · Web架构设计

    现在的一切都是为将来的梦想编织翅膀 让梦想在现实中展翅高飞 Now everything is for the future of dream weaving wings let the dream fly in reality 点击进入系
  • webpack多页面改名的注意事项

    今天在进行项目打包时 由于甲方新规定了文件的名字 需要我们对原先的文件名进行重命名 这个需求是不是很简单 确实很简单 但是一不注意 就会给自己造成找错半天 原来的名字 进行改名 webpack同步更改如下 满心欢喜的以为自己改完了 然后np
  • Volley 源码解析

    1 功能介绍 1 1 Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架 在 Google I O 2013 大会上发布 名字由来 a burst or emission of many t
  • BeanUtil拷贝对象或集合时属性名不对应导致为空

    项目场景 源和目标实体类中的客户ID字段不对应 在使用Hutool的BeanUtil拷贝时字段为空 问题描述 源实体类属性 客户ID private String customerId 目标实体类属性 客户ID private String
  • jquery 小数计算保持精度,同时保留两位数

    点击打开链接 Num 3 Price 11 50 Number Price Num toFixed 2 34 50
  • pytorch 模型GPU推理时间探讨3——正确计算模型推理时间

    前言 上文说到 在统计pytorch模型的推理时间时发现每次的前几次推理耗时都非常多 而且在后面多次的推理中 其时间也呈现出很大的变化 后来经过调研 得知模型在GPU上推理时 需要对GPU进行一个warm up阶段 使得显卡达到工作状态 对
  • 串口拦截通信数据信息

    最近手头上有一个需要通信的外部设备 流量计 直接去看他的通信手册 里面没有例子 SO 刚开始看不太懂 官网上面有一个上位机软件 可以直接操作软件去设置参数 故 利用此上位机软件发送指令 然后在上位机和设备之间引出TX与RX 从而拦截二者串口
  • Qt类中使用函数指针

    使用函数指针有三步骤 1 声明一个函数指针 返回值类型和参数类型要与待指向的函数类型和参数一致 2 获取函数的地址 函数指针指向函数名 3 使用函数指针来调用所指向的函数 class Widget public QWidget public
  • CORE-ESP32C3

    目录 参考博文 源于网友oled eink aht10项目 源代码修改及复现说明 主要修改 显示效果 编辑硬件准备 软件版本 日志及soc下载工具 软件使用 接线说明 天气显示屏 硬件接线 温度采集 日期温度显示屏 正常初始化LOG 示例代