1291|0

1

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

得捷电子 Follow me 第2期任务提交汇总 [复制链接]

 

大家好,10月份收到了这块板子,但是直到最近才有空把它拿出来摆弄摆弄。 论坛的朋友们大都使用了CircuitPython完成这块Adafruit ESP32-S3 TFT FeatherCircuitPython的任务,但是笔者平时习惯了用C/C++来写代码, 所以还是挑选了esp-idf+lvgl的方案, 虽然的确也遇到了一些问题,但是作为第一次写esp32来说,我觉得还是比较容易上手的。

因为使用的esp-idf的方案, 首先需要配置环境, 我使用的是Mac+VSCode+esp-idf插件的方式配置的, 总体来说还是非常顺利的。按照官方的教程直接操作就好了。具体过程可以参考官方教程: https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1/esp32s3/get-started/index.html#get-started-how-to-get-esp-idf

 

工程创建好之后首先要解决的是屏幕显示的问题,最终我使用了github上

链接已隐藏,如需查看请登录或者注册
的代码成功点亮屏幕。

 

任务一、控制屏幕显示中文(必做任务)

首先为了能够显示中文, 我们需要把我们的中文字库转换, 转换使用的lvgl提供的工具: https://lvgl.io/tools/fontconverter,其中range范围参考https://jrgraphix.net/research/unicode.php

从这里我们能够获取到转换好的字库的C数组

声明字体库
LV_FONT_DECLARE(font_OPPOSans_L_16);
static const lv_font_t *main_font = &font_OPPOSans_L_16;
// 使用字体库并创建要显示的标签
    lv_obj_t *lab_task = lv_label_create(parent);
    lv_obj_set_style_text_font(lab_task, main_font, LV_PART_MAIN);
    lv_label_set_text_fmt(lab_task, "得捷电子Follow me第2期 | 任务1-完成屏幕的控制,并且能显示中文");
    lv_obj_set_width(lab_task, lv_obj_get_width(lv_obj_get_parent(parent)));
    lv_label_set_long_mode(lab_task, LV_LABEL_LONG_SCROLL_CIRCULAR);
    lv_obj_align(lab_task, LV_ALIGN_BOTTOM_MID, 0, 0);

任务2:网络功能使用(必做任务)

完成网络功能的使用,能够创建热点和连接到WiFi

// 配置热点的参数,设置热点的类型等。。。。
    wifi_config_t wifi_config = {
            .ap = {
                    .ssid = FOLLOME2_ESP_WIFI_SSID,
                    .ssid_len = strlen(FOLLOME2_ESP_WIFI_SSID),
                    .channel = FOLLOME2_ESP_WIFI_CHANNEL,
                    .password = FOLLOME2_ESP_WIFI_PASS,
                    .max_connection = FOLLOME2_MAX_STA_CONN,
                    .authmode = WIFI_AUTH_WPA2_PSK,
                    .pmf_cfg = {
                            .required = true,
                    },
            },
    };

// 
    netif = esp_netif_create_default_wifi_sta();
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
	netif = esp_netif_create_default_wifi_ap();
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
    ESP_ERROR_CHECK(esp_wifi_start());
    esp_netif_ip_info_t ip_info;
    esp_netif_get_ip_info(esp_netif_get_handle_from_ifkey("WIFI_AP_DEF"), &ip_info);
    char ip_addr[16];
    inet_ntoa_r(ip_info.ip.addr, ip_addr, 16);

任务3:控制WS2812B(必做任务)

使用按键控制板载Neopixel LED的显示和颜色切换

配置WS2812B
#define NEOPIX_GPIO GPIO_NUM_33
#define NEOPIX_PWR_GPIO GPIO_NUM_34
gpio_config_t io_conf = {
                .mode = GPIO_MODE_OUTPUT,
                .pin_bit_mask = (1ULL<<NEOPIX_PWR_GPIO),
                .intr_type = GPIO_INTR_DISABLE,
                .pull_down_en = 0,
                .pull_up_en = 0,
        };
        err = gpio_config(&io_conf);
        if (err != ESP_OK) {
            ESP_LOGE(TAG, "configure GPIO for NEOPIX_PWR failed");
        }

    // 设置LED电源的GPIO引脚的电平为高电平(1)
    err = gpio_set_level(NEOPIX_PWR_GPIO, 1);
    // 配置LED灯带
    led_strip_config_t strip_config = {
            .strip_gpio_num = NEOPIX_GPIO, // LED数据线的GPIO引脚。
            .max_leds = 1, // LED灯带上LED的数量,这里设置为1。
            .led_pixel_format = LED_PIXEL_FORMAT_GRB, // LED的像素格式为GRB。
            .led_model = LED_MODEL_WS2812, // LED灯带的型号。
            .flags.invert_out = false, // 输出信号是否翻转,这里设置为不翻转。
    };
    // 配置RMT(Remote Control)控制器。
    led_strip_rmt_config_t rmt_config = {
            .clk_src = RMT_CLK_SRC_DEFAULT, // 时钟源设置为默认值。
            .resolution_hz = 10 * 1000 * 1000, // RMT的分辨率为10MHz。
            .flags.with_dma = false, // whether to enable the DMA feature
    };
    // 初始化LED灯带设备,并将配置参数传递给它。
    ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip));

设置LED灯带上的第0个像素的颜色,并刷新LED灯带
    led_strip_set_pixel(led_strip, 0, r, g, b);
    led_strip_refresh(led_strip);

任务4:从下方5个分任务中选择1个感兴趣的完成即可(必做任务)

■  分任务1:日历&时钟——完成一个可通过互联网更新的万年历时钟,并显示当地的天气信息

建议搭配器件:Adafruit ESP32-S3 TFT Feather

配置网络接入点,把网络切换成WIFI_MODE_STA模式,
配置sntp同步时间
    esp_sntp_setoperatingmode(SNTP_OPMODE_POLL);
    esp_sntp_setservername(0, "ntp.aliyun.com");
    esp_sntp_setservername(1, "time.asia.apple.com");
    esp_sntp_setservername(2, "pool.ntp.org");
    sntp_set_time_sync_notification_cb(time_sync_notification_cb);
	esp_sntp_init();
天气从http://d1.weather.com.cn/weather_index/{city code}.html获取,需要添加referer
类似curl http://d1.weather.com.cn/weather_index/101020100.html -e http://www.weather.com.cn/
// 配置请求
	char *response = calloc(8192, sizeof(char));
    esp_http_client_config_t config = {
            .url = WEATHER_URL,
            .event_handler = _http_event_handler,
            .crt_bundle_attach = esp_crt_bundle_attach,
            .buffer_size = 8192 * sizeof(char),
            .user_data = response,
            .user_agent = USER_AGENT
    };
    esp_http_client_handle_t client = esp_http_client_init(&config);
    esp_http_client_set_header(client, "Referer", WEATHER_REFERER);
    esp_err_t err = esp_http_client_perform(client);
// 获取请求返回内容
        int64_t len = esp_http_client_get_content_length(client);
        ESP_LOGI(TAG, "HTTPS Status = %d, content_length = %"PRId64,
                 esp_http_client_get_status_code(client),
                 len
        );
        response[len] = '\0';
        ESP_LOGI(TAG, "Response: %s", response);
    esp_http_client_cleanup(client);
// 解析请求转json
    char *json = NULL;
    jparse_ctx_t *jctx = NULL;
    char* pStart = strstr(response, "var dataSK =");
    pStart += 12;
    char* pEnd = strstr(pStart, "};");
    pEnd += 1;
    int len = pEnd - pStart;
    json = malloc(len + 1);
    memcpy(json, pStart, len);
    json[len] = '\0';
    free(response);
    response = NULL;
    jctx = (jparse_ctx_t *)malloc(sizeof(jparse_ctx_t));
    int ret = json_parse_start(jctx, json, strlen(json));
    if (ret != OS_SUCCESS) {
        ESP_LOGE(TAG, "json_parse_start failed\n");
        goto exception;
    }

 

视频: https://training.eeworld.com.cn/video/38432

 

代码包 https://download.eeworld.com.cn/detail/jakeli/629880

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
Proteus 7.7 下载(WIN7、XP都可用)

原来一直在使用7.5版本的,因为最近笔记本换了WIN7系统,不知道是杀软作怪还是我的WIN7用原来的那个7.5兼容不好,就是打不开。 ...

一步一步教你使用uCOS-II

前言篇 前段时间看了Linux版块“zjw50001”网友上传的资料《一步一步教你开发嵌入式 Linux 应用程序》感觉对于学习Linux的新 ...

「ADI模拟大学堂」电源管理基础知识(2014.3.9)

143760「ADI模拟大学堂」电源管理基础知识(2014.3.9) (每日一份资料)由于「ADI模拟大学堂」差分放大器以及相关设计软件的基础 ...

看ZiShi的无线遥控坦克DIY设计

ZiShi:基于51单片机的无线遥控坦克DIY 基于51单片机的无线遥控坦克DIY,与大家分享 *【解密01】基于51单片机的无线遥控坦克 ...

管管又从乐鑫那边申请到好玩的板子拉~~有小伙伴想玩的吗??快进贴一探究竟哦~~

先来晒个图,看谁能说准型号啊~啦啦啦 512780 没猜出来的,回帖看答案拉 512788 ESP32-Korvo V1.1 ...

寻人启事

模拟芯片工程师 1、负责射频、微波、毫米波集成电路芯片的设计; 2、微电子、电子工程、半 ...

OpenHarmony3.0的树莓派4B移植-学习记录

本帖最后由 hazhuzhu 于 2021-12-29 00:13 编辑 前言 以下是学习 OpenHarmony3.0 树莓派4B移植的详细流程记录,主要参考: ...

Nexperia有奖直播|电动汽车中车规功率MOSFET和氮化镓器件的介绍及应用 报名中

Nexperia有奖直播:电动汽车中车规功率MOSFET和氮化镓器件的介绍及应用 报名中 >>点击报名 直播时间:2022年1 ...

NUCLEO-H533RE开发板测评09(HASH算法加密)

群里已经看到关于AES加解密的,这里就评测下hash算法加密 ## 9:HASH算法加密 在现代计算机领域,数据的完整性和安全性是非 ...

【入围名单】Follow me第二季第4期,与得捷一起解锁开发板超能力!

恭喜入围DigiKey联合EEWORLD举办的【Follow me第二季第4期,与得捷一起解锁开发板超能力!】活动的小伙伴,一起跟技术大咖学技术 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表