03 2020 档案
摘要:本文主要介绍c语言中条件编译相关的预编译指令,包括 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。 #define 定义一个预处理宏#undef 取消宏的定义#if 编译预处理中的条件命令,相当于C语法中的if语句#ifde
阅读全文
摘要:在头文件中判断用的是如下代码: 1 #ifdef USE_STDPERIPH_DRIVER 2 #include "stm32f4xx_conf.h" 3 #endif /* USE_STDPERIPH_DRIVER */ 由此引发对#if和#ifdef的思考:这两者有什么区别? 1、#ifdef指
阅读全文
摘要:public/private/protected 的区别 具体区别: 在说明这四个关键字之前,就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。1、public:public表
阅读全文
摘要:char码值对应列表大全 Char("0") 为0的字符Char("1")Char("2")Char("3")Char("4")Char("5")Char("6")Char("7") 响铃Char("8") 回格Char("9") tab(水平制表符)Char("10") 换行Char("11")
阅读全文
摘要:.h ButtonKing *btn; int testcallback; .cpp setup void test(void* ch){ uint8_t num = *( (int*)ch); LightSwitch aa; LightSwitch::switchRelay(num, !bitRe
阅读全文
摘要:typedef void MyCallback(int foo); class MyClass { void doSomething(int i){ } MyOtherClass myOtherClass = new MyOtherClass(doSomething); } class MyOthe
阅读全文
摘要:实际工作中,对于回调函数一直是我不愿意去触碰的东西,一来由于被很多人搞得神秘兮兮的以为是很高深难懂的技术,二来在一般情况下通过互相包含类指针也能够解决问题,所以一直就不想去研究这个东东,最近一个项目中被经理逼着使用了回调函数,切切实实体会到了它的好处,代码中类之间的关系再也不那么错综复杂了,类A想告
阅读全文
摘要:前言关于C++回调函数的介绍网上有很多,要知道它的概念很容易,难的是灵活应用,这里就笔者遇到的一个使用场景对回调函数进行一个简单的介绍,如果能对您有所帮助是我的荣幸。本文不会对C++回调函数的基础知识做过多的介绍,若对其概念不够理解的,笔者在此推介两篇个人认为相当优秀的博客。链接: https://
阅读全文
摘要:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。回调函数机制:1、定义一个函数(普
阅读全文
摘要:创建类对象的方法 C++中有两种创建对象的方法,一种是直接声明,另一种则是使用new关键字,虽然作用相同,但是它们底层的存储方式却完全不同。在此之前,我们先了解一下C++程序的存储形式。 C++程序的内存格局通常分为四个区: 1. data area(全局数据区) 2. code area (代码区
阅读全文
摘要:使用Arduino我们可以做出很炫的作品,它把枯燥的底层代码都封装成了一个个的函数,当我们使用时直接调用相应的函数即可,而不用知道它们是怎么实现的。可是小编认为,非专业人士这么做无可厚非,可是如果作为专业人士也不去关注这些函数的底层代码是如何实现的就有点差强人意了。写作本文的目的就是通过两个函数被转
阅读全文
摘要:位运算符位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示: p q p & q p | q p ^ q0 0 0 0 00 1 0 1 11 1 1 1 01 0 0 1 1 假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示: A = 0011 110
阅读全文
摘要:extern用在变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。 extern修饰变量的声明。 举例:若a.c中需引用b.c中的变量int v,可以在a.c中声明extern int v,然后就可以引用变量v;需要注意的是,被引用的变量v的链接属性必须是外 链接(exter
阅读全文
摘要:在程序编辑过程中,我们可以对变量中的某一位进行操作 工具/原料 Arduino UNO 控制器 * 1 USB 数据线 * 1 Arduino IDE 安装好 Arduino 控制器驱动的台式机 方法/步骤 Arduino IDE 新建代码的方法,程序的上传方法,大家可以参考: http://jin
阅读全文
摘要:#define bitRead(value, bit) (((value) >> (bit)) & 0x01) #define bitSet(value, bit) ((value) |= (1UL << (bit))) #define bitClear(value, bit) ((value) &
阅读全文
摘要:bitset bitset大概就是类似于bool数组一样的东西 但是它的每个位置只占1bit(特别特别小) bitset的原理大概是将很多数压成一个,从而节省空间和时间(暴力出奇迹) 一般来说bitset会让你的算法复杂度 /32/32(具体是什么要看计算机) 定义与初始化 使用bitset类型需#
阅读全文
摘要:String EspClass::getResetReason(void) { const __FlashStringHelper* buff; switch(resetInfo.reason) { // normal startup by power on case REASON_DEFAULT_
阅读全文
摘要:In this tutorial we will check how to use strings in our protobuf messages, using Nanopb and the Arduino core, running both on the ESP32 and on the ES
阅读全文
摘要:https://techtutorialsx.com/2019/06/13/esp8266-spiffs-appending-content-to-file/ ESP8266 SPIFFS: Appending content to file In this tutorial we will lea
阅读全文
摘要:mDNS原理的简单理解——每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少 MDNS协议介绍 mDNS multicast DNS , 使用5353端口,组播
阅读全文
摘要:bitRead在单片机中使用时比较频繁的,尤其对于数码管以及与数码管类似的存在未操作的器件中使用较多。这里我们详细介绍一下它的使用方法。首先我们来看看在arduino的IDE的参考手册中怎么描述的:DescriptionReads a bit of a number.bitRead用来从数当中读取一
阅读全文
摘要:名转成对应映射的地址 1.2 DNS server库 ESP8266使用DNS服务(一般和WebServer服务一起使用,WebServer请回顾 ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用),请在代码中加入以下头文件: #include <DN
阅读全文
摘要:1.编写.proto文件,比如GlobalConfig.proto 2.把GlobalConfig.proto 放到nanopb0.4.1-generator-bin的文件夹里面 3.打开windows 命令行,cd 到当前nanopb0.4.1-generator-bin文件夹,输入 protoc
阅读全文
摘要:Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is especially suitable for use in microcontrollers, but fits any memory rest
阅读全文
摘要:在nanopb中,string类型在生成c语言文件的时候,会有两种结构,一种是指定了最大长度的,一种是没有指定最大长度.指定了最大长度的string,会生成char[] 数组类型,没有指定最大长度的,会生成pb_callback_t类型.具体的可以参照nanopb文档 pb_callback_t 是
阅读全文
摘要:ESP32 / ESP8266 Arduino: Protocol Buffers In this tutorial we will learn how to get started using Protocol Buffers with the Arduino core, both running
阅读全文
摘要:Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接在浏览器上显示或者在访问时弹出文件下载对话框。 格式说明:
阅读全文
摘要:POST请求的消息主体放在entity body中,服务端根据请求头中的Content-Type字段来获取消息主体的编码方式,进而进行解析数据。 一、application/x-www-form-urlencoded 最常见的 POST 提交数据的方式,原生Form表单,如果不设置 enctype
阅读全文
摘要:Soft Access Point Class Section below is ESP8266 specific as Arduino WiFi library documentation does not cover soft access point. The API description
阅读全文
摘要:撰寫ESP8266 library時需要將設定資透過EEPROM library儲存,但又想要避免使用者在使用我寫的library配合EEPROM library時將資料蓋掉而興起研究ESP8266 EEPROM library的念頭,看看是否有可以利用且不需要自行重寫一個將資料儲存的方式。 原理
阅读全文
摘要:1.CRC介绍:循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若
阅读全文
摘要:https://www.lammertbies.nl/comm/info/crc-calculation
阅读全文
摘要:这是一个赋值语句,把等式右边的值赋给左边; 先来看左边是怎么运算的, 由于移位运算符<<的优先级大于位运算符|,所以先计算BUF[1]左移八位,然后再或上BUF[2], 或的操作可以理解为两个数相加;通俗理解的话可以举个列子, 假设BUF[1]的值为0000 0001b(为方便描述,故用二进制表示)
阅读全文
摘要:/CRC16校验在通讯中应用广泛,这里不对其理论进行讨论,只对常见的3种//实现方法进行测试。方法1选用了一种常见的查表方法,类似的还有512字//节、256字等查找表的,至于查找表的生成,这里也略过。// POPULAR POLYNOMIALS // CCITT: x^16 + x^12 + x^
阅读全文
摘要:https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html
阅读全文
摘要:在ESP8266上,两者之间几乎没有选择。这一切实际上归结为您要存储的内容以及您最好如何访问它的方式。 EEPROM仿真非常适合于少量数据-配置值之类的事情。您只想在其中存储一些很少更改的值。 尽管SPIFFS更适合处理大量数据。由于它是一个文件系统,因此可以存储实际文件,这使其非常适合为网页提供图
阅读全文
摘要:EEPROM可以在不使用文件和文件系统的情况下用来固化一些数据,常见的比如用来保存SSID或是Password,保存用户名及密码,保存用户设置等数据,这样就可以不用每次都通过烧写程序来改变系统运行时的初值了。可以实现更复杂的应用。 使用说明 其实EEPROM使用非常简单的,也没必要专门开个帖子写,看
阅读全文
摘要:一、c语言 uint16_t crc_chk(uint8_t *data, uint8_t len){ uint8_t i; uint16_t reg_crc = 0xffff; while(len--) { reg_crc ^= *data++; for(i = 0; i < 8; i++) {
阅读全文
摘要:CRC32为例详细解析(菜鸟至老鸟进阶) CRC-知识解析 cyclic redundancy check 写在前面的话: 之前在做学校项目的时候用到了CRC 原理,但在网上查找的过程中,发现讲解CRC知识的资源很多,但是对新手比较友好的、讲的十分清楚的又很少,很多博主也不求甚解,弄得读起来心中常常
阅读全文
摘要:SYSAHBCLKCTRL |= (1ul << 6); 这个c语言怎么理解,求解 就只有两个运算符:位或运算符 | 以及左移运算符<<先看 |= , 跟 += -= 类似。x |= y 即 x = ( x | y )| 是按位或。 1 | 1 = 1; 1 | 0 = 1; 0 | 0 = 0;数
阅读全文
摘要:使用Arduino开发ESP32:DeepSleep和RTC Memory的使用 2019-07-31 14:27 目的 ESP32在工作时功耗蛮大的,所以我们可以在不需要时进行休眠,这也是蛮常用的功能。 基础说明 DeepSleep 使用DeepSleep主要分为两步: 1、配置唤醒源(可以同时配
阅读全文
摘要:C 库函数 - memset() C 标准库 - <string.h> 描述 C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 声明 下面是 memset() 函数的声明。 v
阅读全文
摘要:文章目录目的特有API说明睡眠模式及系统软复位RTC存储区使用模块基本信息读取电源电压测量总结目的本文介绍了Arduino for esp8266中特有API说明 特有API说明睡眠模式及系统软复位使用ESP.deepSleep(microseconds, mode)可以使ESP8266进入睡眠模式
阅读全文
摘要:http://home.eeworld.com.cn/home.php?mod=space&uid=361439&do=blog&id=334813 ESP8266的RTC时间和系统时间测试对比 已有 6613 次阅读2016-5-17 13:23 |个人分类:ESP8266 WIFI 官方有关时间
阅读全文
摘要:C++ 条件运算符 ? : C++ 运算符 Exp1 ? Exp2 : Exp3; 其中,Exp1、Exp2 和 Exp3 是表达式。请注意冒号的使用和位置。? : 表达式的值取决于 Exp1 的计算结果。如果 Exp1 为真,则计算 Exp2 的值,且 Exp2 的计算结果则为整个 ? : 表达式
阅读全文
摘要:文章目录目的使用演示基本使用1基本使用2动态设置和参数传递停止和重启任务注意事项总结目的Arduino for esp8266属于无操作系统环境,对于开发多任务的复杂应用还是比较麻烦的,所以这里就提供了一个近似于操作系统调度器的功能Ticker。该功能使用非常简单,请看下面示例。 使用演示 基本使用
阅读全文
摘要:Ticker的功能非常简单,就是规定时间后调用函数 总体上,根据功能可以把方法分为两大类: 定时器管理方法; 定时器启用方法; detach() 停止定时器 active() 定时器是否工作 返回值 bool 1.1 前言 Ticker是Arduino Core For ESP8266 内置的一个定
阅读全文
摘要:参考博文https://www.cnblogs.com/yujianfei/p/8974813.html https://www.cnblogs.com/codingmengmeng/p/5906282.html https://blog.csdn.net/guotianqing/article/d
阅读全文
摘要:#include <stdio.h> void main() { unsigned int x = -5; printf("%d", x); } 结果为什么是-5,不是unsigned么,它在二进制中是怎么操作的,不会变成比5大的数吗? 因为就是-5啊,你输出的是【%d】,表示把x当成按照有符号整数
阅读全文
摘要:如果a是整数当然是需要的,因为是先计算再赋值的,计算的时候并不知道你需要浮点。 追问 如果a是整形,那么a=a*1.0是不是就可以把a变成实型? 追答 Yes float a = 12 * 1.0; //编译错误 double b = 12 * 1.0;//正确 float c = 12 * 1.0
阅读全文
摘要:简单来说,uint8_t / uint16_t / uint32_t /uint64_t这些数据类型都只是别名而来,具体如下: 一、C语言数据基本类型在C语言中有6种基本数据类型:short、int、long、float、double、char 1)整型:short int、int、long int
阅读全文
摘要:std::sqrt, std::sqrtf, std::sqrtl C++ 数值库 常用数学函数 定义于头文件 <cmath> (1) float sqrt ( float arg ); float sqrtf( float arg ); (C++11 起) double sqrt ( double
阅读全文
摘要:#include<stdlib.h> void setup() { Serial.begin(115200); char dataH[5]; char dataC[5]; char dataF[5]; float h = 56.00; float c = 31.50; float f = 88.70
阅读全文
摘要:在任何其他C / C ++平台中,当您要使用printf或其同级元素打印(或转换为字符串)浮点数时,可以将“%f”用作格式说明符。任何,除了在Arduino中。 要转换浮点,您需要使用dtostrf(), char * dtostrf( double __val, signed char __wid
阅读全文
摘要:Arduino 整型转字符型 https://blog.csdn.net/janet_1994/article/details/60777848实现了类型转换,主要使用 stdlib.h 中的 itoa() 函数来实现。 功能:将任意类型的数字转换为字符串。在 char * itoa(int val
阅读全文
摘要:1 isnan()isnan() 判断是不是NAN值(not a number非法数字) 标准库中定义了一个宏:NAN来表示非法数字。 比如负数开方、负数求对数、0.0/0.0、0.0* INFINITY(无穷大)、INFINITY/INFINITY、INFINITY-INFINITY 以上操作都会
阅读全文
摘要:在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。 什么是虚函数: 虚函数是指一个类中你希望重载的成员函数 ,当你用一个 基类指针或引用 指向一个继承类对象的时候,调用一个虚函数时, 实际调用的是继承类的版本。 ——摘自MSDN 举例: #include <i
阅读全文
摘要:简介pragma region 是一个Visio Studio Code Editor中的命令,来定义可以扩展和收缩的代码区域的开头和结尾,可以用来收缩或者展开一段代码。 pragma region namepragma endregion comment12参数comment(optional):
阅读全文
摘要:http://c.biancheng.net/view/1360.html 逻辑运算符可以将两个或多个关系表达式连接成一个或使表达式的逻辑反转。本节将介绍如何使用逻辑运算符将两个或多个关系表达式组合成一个。表 1 列出了 C++ 的逻辑运算符。 表 1 逻辑运算符 运算符含义效 果 && 与 将两个
阅读全文
摘要:String 的endsWith() 方法用于测 试字符串是否以指定的后缀结束。如果参数表示的字符序列是此对象表示的字符序列的后缀,则返回 true;否则返回 false。注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则结果为 true。 p
阅读全文
摘要:https://www.home-assistant.io/integrations/input_text/ 1.丟到 MQTT 去保存起來 2.使用 variable 来用node-red做自动化吧,实在是舒服,比ha好太多了
阅读全文