0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【DFRobot Beetle ESP32-C3开发板试用体验】车载导航天气挂件?

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-28 11:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:ZHOUxxx1121, 帖子地址:https://bbs.elecfans.com/jishu_2291088_1_1.html


车载导航天气挂件

设备

  • LCD 1602A显示屏
  • 合宙Air 551G导航模块
  • DFRobot Beetle ESP32-C3开发板
  • 杜邦线若干

连接方式

跟之前的连接一样。

  • ESP32-C3通过自制一分二的线分别给LCD屏幕和Air 551G供电。

  • ESP32-C3的Pin 8(SDA)和9(SCL)与LCD屏幕连接。

  • ESP32-C3的Pin 20(RX)和21(TX)与Air 551G连接。

    0.jpg

功能设计

利用ESP32-C3控制GNSS模块,获取当前UTC时间和经纬度等时间和坐标信息,同时连接WIFI获取所在位置的天气信息。

在LCD屏幕上对时间、坐标以及天气信息等进行显示。

实现效果

1.jpg

基本上完成了设计功能。
后期升级主要是用更好的屏幕,现在用的LCD1602A显示太差,不知道为什么显示很不清晰。
现在时间和坐标信息与天气信息是切换显示的,如果屏幕更大一点,可以加入可视化显示和同屏显示。
最重要的是,如果把几个模块设计到一个模块中,套个好看的外壳,摆在车里面当挂件,是不是也很不错?

代码实现

#include 
#include 
#include 
#include 
#include //修改WIFI名称以及密码
const char* ssid = "**";//WIFI名称
const char* password = "**";//WIFI密码
String openWeatherMapApiKey = "***";//Open weather app ID
double time_utc=0;
double lat=34;// 默认纬度
double lon=113;//默认经度
//设置获取信息的间隔时间,以下用于测试所以设置为10秒
//您应当根据你需要获取数据的网站,规定时间内访问数据的次数上限来限制访问时间的最小间隔
unsigned long lastTime = 0;
//设置每10分钟获得一次天气数据
//unsigned long timerDelay = 600000;
//设置每10秒获得一次天气数据
unsigned long timerDelay = 10000;

LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display

String jsonBuffer;
String lineData="";
int show = -1;
String comdata="";
void setup()
{
  
  
  int error;

  Serial.begin(115200);
  Serial.println("LCD...");
  Serial1.begin(115200,SERIAL_8N1,/*rx =*/20,/*Tx =*/21);  

  // wait on Serial to be available on Leonardo
  while (!Serial&&!Serial1)
    ;
  
  WiFi.begin(ssid, password);
  Serial.println("Connecting WIFI...");
  //判断WIFI是否连接
  while(WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
  Serial.println("Timer set to 10 seconds (timerDelay variable), it will take 10 seconds before publishing the first reading.");


  Serial.println("Dose: check for LCD");

  Wire.begin();
  Wire.beginTransmission(0x27);
  error = Wire.endTransmission();
  Serial.print("Error: ");
  Serial.print(error);

  if (error == 0) {
    Serial.println(": LCD found.");
    show = 0;
    lcd.begin(16, 2); // initialize the lcd

  } else {
    Serial.println(": LCD not found.");
  } // if
  //lcd.print("WIFI&I2C&SERIAL OK");
  lcd.setBacklight(0);
  delay(400);
  lcd.setBacklight(255);
  lcd.home();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("WIFI&SCREEN&GNSS");
  lcd.setCursor(0, 1);
  lcd.print("IS READY!");
  lcd.noBlink();
  lcd.noCursor();
  delay(1000);

} // setup()

void loop()
{
  while(Serial1.available()>0)
  {
    lineData=char(Serial1.read());
    comdata+=lineData;
    delay(2);
  }
  if (comdata.length()>0)
  {
    Serial.println(comdata);
    int ic=comdata.indexOf('*');
    
    String tmp=comdata.substring(1,ic);
    if(tmp.substring(0,5)==("GNGGA"))
    {
      lcd.home();
      lcd.clear();
      lcd.setCursor(0, 0);

      time_utc=tmp.substring(6,16).toDouble()+80000;
      if (time_utc>240000)
        time_utc-=240000;
      Serial.println("T="+String(time_utc));  
      lcd.print("T="+String(time_utc)); 
      
      lat=tmp.substring(17,19).toDouble()+tmp.substring(19,27).toDouble()/60;
      lon=tmp.substring(30,33).toDouble()+tmp.substring(33,41).toDouble()/60;
      
      Serial.println("Lat="+String(lat));
      Serial.println("Lon="+String(lon));
      
      lcd.setCursor(0, 1);
      lcd.print("B="+String(lat).substring(0,6)+" L="+String(lon).substring(0,7));
      //Serial.println("$GNGGA detected..");
    }
      
    
    comdata="";
  }
   //发送HTTP获取请求
  if ((millis() - lastTime) > timerDelay) {
    //检测WIFI是否已经连接
    if(WiFi.status()== WL_CONNECTED){
      //String serverPath = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + countryCode + "&appid=" + openWeatherMapApiKey;
      String serverPath = "http://api.openweathermap.org/data/2.5/weather?lat=" + String(lat) + "&lon=" + String(lon) + "&appid=" + openWeatherMapApiKey;      //将组合好的URL放入httpGETRequest函数中通过HTTP获取请求以获得文本
      jsonBuffer = httpGETRequest(serverPath.c_str());
      Serial.println(jsonBuffer);

      //将解析的Json对象值储存在Jsonu缓冲区中
      JSONVar myObject = JSON.parse(jsonBuffer);

      //判断解析是否成功
      if (JSON.typeof(myObject) == "undefined") {
        Serial.println("Parsing input failed!");
        return;
      }

      Serial.print("JSON object = ");
      Serial.println(myObject);
      Serial.print("Temperature: ");
      //获取到的温度其实是开氏度。
      //开氏度 = 摄氏度+273.15
      double c = myObject["main"]["temp"];
      c = c-273.15;
      Serial.println(c);
      
      lcd.home();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("T="+String(c)+" ");
      
      Serial.print("Pressure: ");
      //myObject["main"]["pressure"]前为{}前的引号内容,后为读取哪一个引号后数据
      Serial.println(myObject["main"]["pressure"]);
      Serial.print("Humidity: ");
      Serial.println(myObject["main"]["humidity"]);

      double pres=myObject["main"]["pressure"];
      lcd.print("P="+String(pres));
      
      Serial.print("Wind Speed: ");
      Serial.println(myObject["wind"]["speed"]);

      lcd.setCursor(0, 1);
      double wind=myObject["wind"]["speed"];
      lcd.print("Wind="+String(wind)+" ");

      double Hu=myObject["main"]["humidity"];
      lcd.print("H="+String(Hu));
    }
    else {
      Serial.println("WiFi Disconnected");
    }
    lastTime = millis();
  }
} // loop()

String httpGETRequest(const char* serverName) {
  WiFiClient client;
  HTTPClient http;

  //连接网址
  http.begin(client, serverName);

  //发送HTTP站点请求
  int httpResponseCode = http.GET();

  //该数组用于储存获得的数据
  String payload = "{}";

  //将获得的数据放入数组
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }

  //释放资源
  http.end();

  //返回获得的数据用于Json处理
  return payload;
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ESP32
    +关注

    关注

    24

    文章

    1089

    浏览量

    20908
  • DFRobot
    +关注

    关注

    4

    文章

    1164

    浏览量

    11955
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    同样是乐鑫科技ESP32-P4C5开发板,到底应该怎么选?选型指南在这!

    更多都是用乐鑫科技ESP32-P4和ESP32-C5芯片设计的开发板,启明云端为什么要设计两款?WT99P4C5-S1和WTDKP4C5-S
    的头像 发表于 12-15 18:03 555次阅读
    同样是乐鑫科技<b class='flag-5'>ESP32-P4C</b>5<b class='flag-5'>开发板</b>,到底应该怎么选?选型指南在这!

    ESP32-P4全功能开发板ESP32-P4-TINY开发板该怎么选?看这篇就够了!

    启明云端基于乐鑫科技ESP32-P4芯片设计了多款开发板,这些开发板有什么区别?基于应用场景如何选择?本期,我们聚焦两款代表性产品:WT99P4C5-S1
    的头像 发表于 12-09 18:02 164次阅读
    <b class='flag-5'>ESP32</b>-P4全功能<b class='flag-5'>开发板</b>和<b class='flag-5'>ESP32</b>-P4-TINY<b class='flag-5'>开发板</b>该怎么选?看这篇就够了!

    乐鑫科技ESP32-S3开发板+超声波雾化,给智能鱼缸整点美学氛围

    我们为什么要给智能鱼缸弄上雾化?美学氛围当然是一方面,但更重要的功能是局部加湿,为水面植物与周围空气提供柔和湿度。因此我们特意推出本期内容:用乐鑫科技ESP32-S3开发板和超声波雾化模块让水面形成
    的头像 发表于 12-08 18:04 135次阅读
    乐鑫科技<b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b>+超声波雾化,给智能鱼缸整点美学氛围

    这块乐鑫科技ESP32-C3开发板太懂开发者了!双无线+全接口,不要太实用

    设计之初就瞄准了开发过程中的这些痛点,让你能把更多精力放在创意实现上!性能足够能打,物联网应用无压力搭载乐鑫科技ESP32-C3芯片,采用RISC-V架构,最高主频
    的头像 发表于 12-01 18:02 416次阅读
    这块乐鑫科技<b class='flag-5'>ESP32-C3</b><b class='flag-5'>开发板</b>太懂<b class='flag-5'>开发</b>者了!双无线+全接口,不要太实用

    低成本开源!用乐鑫科技ESP32-S3开发板轻松驱动无刷电机,保姆级教程来了!

    想用ESP32-S3开发板驱动无刷电机却不知从何下手?本教程将手把手教你完成从硬件连接到软件编程的全流程,无论你是新手还是有一定经验的开发者,都能轻松掌握!本教程代码已全部开源!后台私信关键词
    的头像 发表于 11-06 18:03 303次阅读
    低成本开源!用乐鑫科技<b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b>轻松驱动无刷电机,保姆级教程来了!

    ESP32-C3 mqtt操作实践

    ; 其中-t /topic/qos0表示需要往那个topic发送。 此时,可以看到开发板正常接受到了pc发过来的消息。 4.手机控制 此处只做局域网内的控制,也就是手机、电脑、esp32-c3
    发表于 10-31 06:52

    ESP32-C3赋能物联网设备,开启产品智能化,乐鑫代理商飞睿科技

    仅43μA)。丰富的接口和耐高温设计使其适用于智能家居、工业自动化、可穿戴设备等多个领域。配合成熟的ESP-IDF开发框架,ESP32-C3为物联网设备开发提供了
    的头像 发表于 10-27 10:53 487次阅读
    <b class='flag-5'>ESP32-C3</b>赋能物联网设备,开启产品智能化,乐鑫代理商飞睿科技

    ESP32-C3赋能物联网设备,开启产品智能化,乐鑫代理商飞睿科技

    仅43μA)。丰富的接口和耐高温设计使其适用于智能家居、工业自动化、可穿戴设备等多个领域。配合成熟的ESP-IDF开发框架,ESP32-C3为物联网设备开发提供了高性能、高安全性的解决
    的头像 发表于 10-27 10:46 325次阅读

    乐鑫科技ESP32-S3开发板配单色LED,竟能玩出这么多花样!代码开源,速来白嫖!

    的效果。材料准备1×ESP32-S3开发板1×USB转TypeC线1×165x55x10mm面包若干15cm杜邦线若干5mm单色LED本教程ESP32-S3
    的头像 发表于 10-23 18:02 1763次阅读
    乐鑫科技<b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b>配单色LED,竟能玩出这么多花样!代码开源,速来白嫖!

    ESP32-P4 口袋开发板 启明云端 WT9932P4-TINY开发板

    在万物互联的智能时代,您是否还在为寻找一款性能强大、接口丰富、应用灵活的嵌入式开发板而烦恼?启明云端全新推出的WT9932P4-TINY开发板,基于乐鑫科技高性能ESP32-P4芯片匠心打造,专为安
    的头像 发表于 09-11 18:06 1028次阅读
    <b class='flag-5'>ESP32</b>-P4 口袋<b class='flag-5'>开发板</b> 启明云端 WT9932P4-TINY<b class='flag-5'>开发板</b>

    ESP32-P4-MINI开发板开箱和上手指南来了!速速码住!

    上期“梦中情ESP32-P4-MINI开发板一出就备受青睐这期我们立马就端着开箱和上手指南来了!不用惊叹,我们就是这么迅速,请把“启明云端权威”打在公屏上好嘛!开箱展示拿到
    的头像 发表于 07-25 18:02 1468次阅读
    <b class='flag-5'>ESP32</b>-P4-MINI<b class='flag-5'>开发板</b>开箱和上手指南来了!速速码住!

    ESP32开发板元件资料

    ESP32开发板元件
    发表于 07-21 14:47 14次下载

    ESP32-P4 C5开发板烧录小智全流程!速看!

    没错,你没有看错!我们带着WT99P4C5-S1开发板烧录小智全流程走来了!开发板搭载乐鑫科技ESP32-P4和ESP32-C5芯片,代码完
    的头像 发表于 07-04 18:03 1689次阅读
    <b class='flag-5'>ESP32</b>-P4 <b class='flag-5'>C</b>5<b class='flag-5'>开发板</b>烧录小智全流程!速看!

    ESP32-S3开发板烧录小智AI系统全流程指南

    在AI语音交互领域不断发展的今天,开发者们对于功能强大、开源灵活的开发板需求日益增长。今天,我们就来详细了解一下ESP32AgentDevKit烧录小智的全流程,这款搭载乐鑫科技ESP32-S
    的头像 发表于 06-16 18:01 7084次阅读
    <b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b>烧录小智AI系统全流程指南

    ESP32-C3开发板全面支持小智AI!烧录实战指南来了!

    本文将详细解析基于乐鑫ESP32-C3芯片的ZXAIEC43开发板烧录“小智”AI语音系统的全流程。该方案代码完全开源,支持深度定制开发,适用于智能玩具、潮玩手办及智能家居控制等多元场景。开发
    的头像 发表于 06-13 18:01 3659次阅读
    <b class='flag-5'>ESP32-C3</b><b class='flag-5'>开发板</b>全面支持小智AI!烧录实战指南来了!