esp32c3 xiao 脚本记录

oled显示网络时间, wifi链接网络

// ntp_get_date.h
#include "time.h"

String week[8] = {
  "Sun", "Mon", "Tues", "Wednes", "Thur", "Fri", "Sat"
};

void printLocalTime(Adafruit_SSD1306 &display) { //打印本地时间函数
  struct tm timeinfo;
  if(!getLocalTime( & timeinfo)) {
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.println(&timeinfo, "%A, %Y-%m-%d %H:%M:%S");
  char display_str[30] = {0};
  sprintf(display_str,"%04d-%02d-%02d %02d:%02d:%02d %01d", 
    timeinfo.tm_year+1900, 
    timeinfo.tm_mon+1, 
    timeinfo.tm_mday, 
    timeinfo.tm_hour, 
    timeinfo.tm_min, 
    timeinfo.tm_sec, timeinfo.tm_wday);
  display.clearDisplay();
  display.setCursor(0, 0);
  display.println(display_str);
  display.display();
}

const char * ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 28800;
const int daylightOffset_sec = 0;

void ntp_get_date_init() {
  // 将请求数据包传输到NTP服务器,并将接收到的时间戳数据包解析为可读格式
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}
// main.cpp
#include <Arduino.h>
#include <WiFi.h>
#include <Adafruit_SSD1306.h>
#include "ntp_get_date.h"
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire);

const char* id="Wifi账号";   //定义两个字符串指针常量
const char* psw="wifi密码";

void setup() {
  // 串口初始化
  Serial.begin(115200);
  // oled初始化
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
    Serial.println(F("SSD1306 allocation failed"));
    for (;;)
      ; // Don't proceed, loop forever
  }
  display.display();
  delay(500); 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setRotation(0);
  display.clearDisplay();
  // wifi初始化
  WiFi.begin(id,psw);
  while(WiFi.status()!=WL_CONNECTED){			//未连接上
    delay(500);
    Serial.println("connection...");
  }
  display.setCursor(0, 0);
  display.println("wifi connect to Wifi007 success");
  display.display();
  Serial.println("wifi connect to Wifi007 success");

  ntp_get_date_init();
}


void loop() {
  printLocalTime(display);
  delay(500);
}

在这里插入图片描述

mqtt订阅和发布信息

服务端 docker安装emqx

# http://t.csdn.cn/PqPEo
docker run -dit --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 -p 8084:8084 emqx/emqx:latest

浏览器登录: http://192.168.3.12:18083/#/dashboard/overview
admin 密码是public

18083 管理控制端口
1883 mqtt协议端口
8083 MQTTwebSocket端口

# 认证方式
https://blog.csdn.net/weixin_43869518/article/details/127558282

客户端 esp32c3 xiao

#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>

const char* id="wifi账号";   //定义两个字符串指针常量
const char* psw="wifi密码";
const char* mqtt_server = "192.168.3.12"; // 服务IP
const uint16_t mqtt_port = 1883; // 服务端口

WiFiClient espClient; // WiFi客户端节点
PubSubClient mqttClient(espClient); //   

void callback(char* topic, byte* payload, unsigned int length);
void reconnect();


void setup() {
  // 串口初始化
  Serial.begin(115200);

  // wifi初始化
  WiFi.mode(WIFI_STA);
  WiFi.begin(id, psw);
  while(WiFi.status()!=WL_CONNECTED){			//未连接上
    delay(500);
    Serial.println("connection...");
  }
  Serial.println("wifi connect to Wifi007 success");
  mqttClient.setServer(mqtt_server, mqtt_port);
  mqttClient.setCallback(callback);
  randomSeed(micros());
}


#define MSG_BUFFER_SIZE	(50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
unsigned long lastMsg = 0;

void loop() {
  if (!mqttClient.connected()) {
    reconnect();
  }
  mqttClient.loop();
  
  /*
    下面是给订阅的消息队列发送随机数, 也就是mqtt的发布
  */
  unsigned long now = millis();
  if (now - lastMsg > 2000) {
    lastMsg = now;
    value = random(1,50);//生成一个随机数
    snprintf (msg, MSG_BUFFER_SIZE, "%ld", value);//将随机数转变成为字符串
    Serial.print("Publish message: ");
    Serial.println(msg);
    mqttClient.publish("test/topic2", msg);//发布这个随机数
  }
}

/**
 * 下面是订阅获取数据
*/
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void reconnect() {
  while (!mqttClient.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (mqttClient.connect("ESP32Client")) {
      Serial.println("connected");

      // 一旦连接上了,就发布一个主题,这个主题是自定义的,您可以在自己的MQTT服务器进行查看
      mqttClient.publish("test/topic2", "hello world");
      // subscribe是订阅的意思,MQTT通信的核心就是“订阅+发布”

      mqttClient.subscribe("test/topic1");
      mqttClient.subscribe("test/topic2");
    } else {
      Serial.print("failed, rc=");
      Serial.print(mqttClient.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/61226.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】

网页版Java五子棋项目&#xff08;二&#xff09;前后端实现用户的登录和注册功能【用户模块】 在用户模块我们要清楚要完成的任务一、MyBatis后端操作数据库1. 需要在数据库创建用户数据库1. 用户id2. 用户名3. 密码4. 天梯积分5. 总场数6. 获胜场数 2. 创建用户类User和数据库…

vue2-vue项目中你是如何解决跨域的?

1、跨域是什么&#xff1f; 跨域本质是浏览器基于同源策略的一种安全手段。 同源策略&#xff08;sameoriginpolicy&#xff09;&#xff0c;是一种约定&#xff0c;它是浏览器最核心也是最基本的安全功能。 所谓同源&#xff08;即指在同一个域&#xff09;具有以下三个相同点…

【分布式系统】聊聊服务调度

什么是服务治理 对于程序员来说的话&#xff0c;把功能按照一定的设计进行开发上线之后&#xff0c;其实并不够&#xff0c;在未来的时间内&#xff0c;其实还需要做好功能的维护工作&#xff0c;而维护项目的成本远远高于开发出一个软件的成本。 对于功能开发起来期来说&am…

2021-03-03 Multisim 14.0 电池充电防止反接保护

R2R3当作充电线电阻看,也可设置这2个电阻导线电阻,电阻取值依据充电电流范围确定,由于电池存在电压因此可以用光耦检测,发光二极管当作继电器看,可采用继电器自锁,当下次再次反接的话另一个继电器同样,2个继电器相互控制.本电路可验证极性变化时2路检测的变化,图中S1为模拟电池…

聊聊混合动力汽车和纯电骑车的优势和劣势

混合动力汽车和纯电动骑车是两种不同的交通工具&#xff0c;它们都有各自的优势和劣势。本文将分别探讨混合动力汽车和纯电动骑车的优势和劣势&#xff0c;并为文章提供三个备选的好听的标题。 混合动力汽车是一种结合了内燃机和电动机的汽车&#xff0c;它可以同时利用燃油和电…

【rust/入门】windows安装rust gnu环境(折腾)

说在前面 首先说明&#xff0c;我是rust入门选手&#xff0c;之前都是在wsl写rust&#xff0c;突然想在windows下装下rust。windows版本&#xff1a;windows11 22H2原文换源 心路历程 看到教程我陷入了沉默&#xff0c;(官方推荐) 打开Microsoft C Build Tools我开始不解&…

【RabbitMQ】golang客户端教程3——发布订阅(使用fanout交换器)

发布订阅 在上一个教程中&#xff0c;我们创建了一个工作队列。工作队列背后的假设是每个任务只传递给一个工人。在这一部分中&#xff0c;我们将做一些完全不同的事情——我们将向多个消费者传递一个消息。这就是所谓的“订阅/发布模式”。 为了说明这种模式&#xff0c;我们…

06 Ubuntu22.04上的miniconda3安装、深度学习常用环境配置

下载脚本 我依然是在清华镜像当中寻找的脚本。这里找脚本真的十分方便&#xff0c;我十分推荐。 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh 下载十分快速&#xff0c;10秒解决问题 运行miniconda3安装脚本 赋予执…

项目一:基于stm32的阿里云智慧消防监控系统

若该文为原创文章&#xff0c;转载请注明原文出处。 Hi&#xff0c;大家好&#xff0c;我是忆枫&#xff0c;今天向大家介绍一个单片机项目。 一、简介 智慧消防监控系统&#xff0c;是用于检测火灾&#xff0c;温度&#xff0c;烟雾的监控系统。以 stm32单片机为核心外加 MQ…

掌握Memory Profiler技巧:识别内存问题

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、如何使用四、页面说明4.1 Java 和 Kotlin 分配…

LeetCode 热题 100 JavaScript--102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#xff1a; 输入&#xff1a;root [1…

il汇编整数相加

在这里尝试了IL汇编字符串连接&#xff1b; IL汇编字符串连接_bcbobo21cn的博客-CSDN博客 下面来看一下IL汇编整数相加&#xff1b; 大概的看一下一些资料&#xff0c;下面语句&#xff0c; ldc.i4 20 ldc.i4 30 add 看上去像是&#xff0c;装载整数20到一个类似于…

【C++学习手札】一文带你初识构造函数和拷贝构造函数、析构函数

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a; C类 ♈️今日夜电波&#xff1a; アイネクライネ —米津玄師 1:11 ━━━━━━️&#x1f49f;──────── 4:50 …

vue el-input 使用 回车键会刷新页面的问题

场景&#xff1a; vue项目中 在输入框输入字符并按下回车键搜索时&#xff0c;不会进行搜索&#xff0c; 而是会刷新页面 原因&#xff1a; 当form表单中只有一个input时&#xff0c;按下回车建会自动触发页面的提交功能&#xff0c; 产生刷新页面的行为 解决&#xff1a; 在…

《Java-SE-第二十九章》之Synchronized原理与JUC常用类

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

【ChatGPT 指令大全】怎么利用ChatGPT写报告

目录 选定切入角度 报告开头 大纲生成 草稿撰写 研究报告 提出反对观点 报告总结 研究来源 总结 随着人工智能技术的快速发展&#xff0c;自然语言处理技术在各个领域的应用越来越广泛。其中&#xff0c;ChatGPT作为目前最先进的自然语言处理模型之一&#xff0c;其强…

助力618-Y的混沌实践之路 | 京东云技术团队

一、写在前面 1、混沌是什么&#xff1f; 混沌工程&#xff08;Chaos Engineering&#xff09;的概念由 Netflix 在 2010 年提出&#xff0c;通过主动向系统中引入异常状态&#xff0c;并根据系统在各种压力下的行为表现确定优化策略&#xff0c;是保障系统稳定性的新型手段。…

Go语言time库,时间和日期相关的操作方法

time库 用于处理时间、日期和时区的核心库。在实际开发中&#xff0c;常常需要与时间打交道&#xff0c;例如记录日志、处理时间差、计算时间间隔等等。因此&#xff0c;掌握time库的使用方法对于Go开发者来说非常重要。 在Go语言中&#xff0c;时间表示为time.Time类型&…

基于 yolov8 的人体姿态评估

写在前面 工作中遇到&#xff0c;简单整理博文内容为使用预训练模型的一个预测 Demo测试图片来源与网络,如有侵权请告知理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停…