关于arduino:COAP协议-arduino-ESP32-M2M端对端通讯与代码详解

前言最近我在钻研 COAP 协定,在尝试应用 COAP 协定找了到了一个能在ESP32上用的coap-simple库,尽管库并不欠缺对于loop解决的局部应该是没写完,然而对于第一次接触COAP的敌人来说更容易了解,不便学习,须要的敌人能够去上面下载: https://github.com/hirotakast...我之前应用 IOT PI 的 COAP 能和 PC node coap 通信,然而因为 coap-simple 库不欠缺,失常的无奈与 node coap 通信,只能和同样应用这个库设施通信,这次就来尝试 ESP32 之间的 M2M 通信。 获取库应用 arduino IDE 就能下载到这个库:如果没有看到这个库,能够去首选项增加一下附加开发板管理器网址: https://github.com/espressif/...具体应用能够参考的我 arduino 超具体的开发入门领导 或者间接通过我下面发的 GitHub 网址下载。 代码解析以下代码为了不便解说,可能通过了调换了程序或者裁剪。 这个 demo 是客户端、服务端一体的,只须要注册对应的回调函数就行。 初始化局部这部分包含了设施初始化,协定初始化等局部,重点在服务器/客户端的回调函数局部。和 SDDC 官网demo相似,在这注册回调函数之后,通过对应的端点找到对应的回调函数。 #include <WiFi.h>#include <WiFiUdp.h>#include <coap-simple.h>void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // LED State pinMode(9, OUTPUT); digitalWrite(9, HIGH); LEDSTATE = true; // 增加服务器url端点. // 能够增加多个端点url. // coap.server(callback_switch, "switch"); // coap.server(callback_env, "env/temp"); // coap.server(callback_env, "env/humidity"); Serial.println("Setup Callback Light"); // 其实就是注册服务器解决回调函数 // 将解决函数指针与url增加到 uri.add 中 coap.server(callback_light, "light"); // 注册客户端响应的回调函数。 // this endpoint is single callback. Serial.println("Setup Response Callback"); // 很下面一样,其实就是把回调函数指针注册到resp里 coap.response(callback_response); // 应用默认端口5683 启动 coap server/client coap.start();}void loop() { // 作为客户端时向coap服务器发送GET或PUT coap申请. // 能够发送给另外一个 ESP32 // msgid = coap.put(IPAddress(192, 168, 128, 101), 5683, "light", "0"); // msgid = coap.get(IPAddress(192, 168, 128, 101), 5683, "light"); delay(1000); coap.loop();}回调函数// CoAP 服务器端点 URL ,对客户端发过来的命令进行解决并且回应void callback_light(CoapPacket &packet, IPAddress ip, int port) { // 这是一个模仿控灯的回调函数,通过接管的命令 Serial.println("[Light] ON/OFF"); Serial.println(packet.messageid); // 发送响应 char p[packet.payloadlen + 1]; memcpy(p, packet.payload, packet.payloadlen); p[packet.payloadlen] = NULL; String message(p); if (message.equals("0")) LEDSTATE = false; else if(message.equals("1")) LEDSTATE = true; if (LEDSTATE) { digitalWrite(9, HIGH) ; Serial.println("[Light] ON"); coap.sendResponse(ip, port, packet.messageid, "1"); } else { digitalWrite(9, LOW) ; Serial.println("[Light] OFF"); coap.sendResponse(ip, port, packet.messageid, "0"); }}// CoAP客户端响应回调void callback_response(CoapPacket &packet, IPAddress ip, int port) { Serial.println("[Coap Response got]"); char p[packet.payloadlen + 1]; memcpy(p, packet.payload, packet.payloadlen); p[packet.payloadlen] = NULL; Serial.println(p);}库代码报文构造定义: ...

December 8, 2021 · 5 min · jiezi

关于arduino:问题记录-arduino-COAP-与-PC-通讯失败

我的项目场景:arduino COAP 与 PC 通信失败问题形容:在应用 arduino IDE 中获取的 coap-simple 库 搭建 COAP 服务端与 PC 的 Node CoAP CLI 客户端通信呈现超时PC 的 Node CoAP CLI 客户端与 IOT PI 通信失常,然而在与 ESP32S arduino 通信时,ESP32能收到数据,然而 PC 提醒 timeout : 起因剖析:的确抓到了 ESP32S 的 ACK 包:然而抓包后果看不出异样,IP 端口 messageID 看上去都失常:感觉有问题的中央都查看过了,目前没有什么思路。 解决方案:揣测是报文解析出问题了,尝试应用ESP32 与 ESP32 通信验证这个库是否可用

December 8, 2021 · 1 min · jiezi

关于arduino:2021爱智先行者红外学习模块空调遥控器

【本文正在参加"2021爱智先行者-征文大赛"流动】https://mp.weixin.qq.com/s/I2... 前言之前做了两个传感器2021爱智先行者—人体存在传感器-CSDN社区 和 从零开始的DIY智能家居 - 基于 ESP32 的智能光照传感器_灵感桌面的博客-CSDN博客,后果就管制一下灯?那也太节约了吧,这次我筹备把我出门遗记敞开频率第二名!节约电第一名的 空调 给整一下,省得回家发现空调没关,那就更加炸裂了! 不过我空调开关是同一个按键,并且没方法间接获取空调状态,空调太贵了我也不敢拆了革新(秒怂(/\)) 于是就用到了我之前做的红外测温枪,超进化!--智能温度传感器!基于 arduino 的智能测温模块_灵感桌面的博客-CSDN博客 通过温度来判断我到底有没有关空调。 我算过,我这破空调一小时一块多钱,开一天就够我吃顿饭了。对于我这种穷逼来说,这是不可承受的!(•へ•╬) 不过当初这种手动开关也挺蠢的,之后写一个智能管制的利用,自动控制试试。当然,我丝毫不介意大佬有工夫帮我写一个更加NB的。|・・` ) 硬件抉择首先,就是翼辉的 边缘计算机 Spirit 1 边缘计算机,这套环境都是建设在这个玩意的根底上。 还有祖传的安信可 ESP32S 。安信可看到了能不能给我点资助啊?给我报销一下板子钱也行啊,你看爱智都给我这机会了! 红外学习模块 就是花20淘宝买的玩意,能够学习并贮存16个键值,不过我就用了一个。 管脚应用 UART 管制(P16-Tx、P17-Rx、3V3-3V3、GND-GND) 留神!:这个红外二极管得放平,要不然会被旁边的接管模块挡住,影响信号角度。我这就是焊的时候没留神,前面硬掰的。 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码跑的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接 clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git其实看过我之前文章的敌人应该曾经发现了,基本上就是套我的那套 SDK 的模板,看过之前的敌人能够间接去看设施管制命令 和 设施管制流程。 如果对我写的 SDK 开发不是很分明的敌人能够持续看上来。 下载或者 clone代码后这次会用到这个三个文件夹: cjson:我移植的 cjson 库,就是规范的 cjson 库,放到 arduino 装置目录下的 libraries 文件夹里,百度一下 cjson 的函数应用就行了。 libsddc:是我移植自官网的SDDC库和本人写的 SDK,也是放入 libraries 文件夹里就行。外面是 SDDC 协定的处理函数,咱们不必管。 demo 文件夹外面就是咱们各种传感器的 demo 代码了: ...

November 26, 2021 · 3 min · jiezi

关于arduino:2021爱智先行者人体存在感传感器

【本文正在参加"2021爱智先行者-征文大赛"流动】https://mp.weixin.qq.com/s/I2... 上次说了在 智能灯光开关 的我说了在憋大招,那必定不会只有这点货色,那么明天咱们就来持续!之前 智能灯光开关和光照传感器 曾经简略的实现了一个小场景的设施搭建,然而这么好玩的点子怎么就只做这么简略的货色呢?那当然不行了啊,得搞事件!搞大事件! 之前的场景仅仅具备查看有没有关灯,并且近程关灯的性能,家里有没有其他人在家,是没方法感知到的,还是不够智能。摄像头又太简单太贵,于是我筹备寻找一个好使的传感器来感知,人的存在。 硬件抉择首先,就是翼辉的 边缘计算机 Spirit 1 边缘计算机,这套环境都是建设在这个玩意的根底上。 还有祖传的安信可 ESP32S 。 人体存在传感器人体存在传感器方面困扰了我好一阵子,所以筹备专门讲一下这个传感器,我尝试了市面上很多人体传感器,常见的大都是CW多普勒体制+相似bis0001芯片 把信号放大进行检测,要么是青蛙眼,只能检测到静止,而且是大幅度静止(具体点:2米间隔我甩手没用,得晃动身材。淘宝买到贼贵的那种 );要么是误报率极高,判断难度很高。都没方法简略的满足我的需要,我在打游戏的时候传感器检测不到我,把我灯关了岂不是很难堪? 不过最初我还是找到了一个好货色:阶跃时进的 HS2BC3A 这是一个毫米波传感器。这玩意可有意思了,采纳相似雷达的原理,向检测区域发射 24GHz 的 FMCW 无线电波,并接管区域内的所有静止、微动、极弱微动的指标反射的无线电波,经传感器零碎中的毫米波 MMIC 电路转换为电信号,并由数字信号算法处理单元进行信号处理(呼吸信号 提取算法),解算出指标信息(存在、微动、静止、静止等状态)。 这玩意实际上也是一个青蛙眼,也是通过检测到静止来判断,然而他精度能检测到人呼吸产生的静止,家喻户晓,人不呼吸就会死,所以这个问题也就不复存在了,而且不只是呼吸,包含人的很多大小动作也能被他精确的捕捉到(呼吸都能捕捉到,别说动动手指什么的了),而且还能够通过串口配置很多参数。我理论用起来成果十分棒。 HS2BC3A 能够说是老少皆宜, 有简略的IO数字量输入满足根本应用需要,还有串口能够进行简单的配置和具体数据输入,串口具体输入甚至能追踪最多8个指标,报告指标的数量间隔与信噪比(与数据可靠性相干)。还能够批改模块探测间隔,灵敏度,输入模式,输入延时工夫(确定指标延时与指标失落延时),被动获取数据等性能,须要留神的一点是,串口的配置不影响IO口输入,敞开了串口上的被动上报并不会影响IO口输入。 因为这个模块太过敏感(HS2BC3A 探测范畴是100°×100°,近距离探测范畴还会更大一些),在测试和调试的时候,倡议将灵敏度和探测间隔调整到最低,而后将输入延时工夫设置为最短,将模块搁置到高于头顶的地位,不便调试代码,要不然会始终检测到调试人员的存在,加上默认继续15S检测不到信号才会判断没人,导致我测试的时候始终没方法切换到无人状态,一度让我狐疑,是不是设施坏了 。 理论应用的时候官网默认配置就挺好用(我装置在天花板上,大略2-3米高),一个传感器齐全能够笼罩主卧和客厅这些地位。手册上写最远7米,设置最多能够到9米,然而远距离探测角度会变窄。 不过官网手册上说因为是检测人体流动和呼吸,如果环境中有干扰源能够通过缩小灵敏度躲避,或者通过具体串口获取具体数据:点云指标输入 $JYRPO ,这个信息蕴含了指标序号,指标间隔,指标信噪比等信息其中信噪比和可靠性无关,信噪比越大,代表以后检测到的指标可靠性越高,不便手动对数据进行筛选。 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码跑的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接 clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git这次受限于篇幅,我就不在赘述代码获取了,代码在 human_body_induction 文件夹外面,如果有不会应用的敌人,能够参考上一篇文档:2021爱智先行者—智能灯光开关-CSDN社区 设施管制命令:通过 Spirit 1 的应用程序或者调试工具 嗅探器 向传感器设施发送的命令: { "method": "get", "obj": ["rtgy"]}设施和协定初始化流程:基于官网 demo 写的不须要做什么批改,次要是设施初始化,管脚配置,和协定初始化局部。 /* * 初始化传感器 */void sensor_init(){ // 初始化 GOIP 口为输出模式,接管传感器发送的信息 pinMode(sensor_in,INPUT); // 创立传感器工作,周期性传感器的数据并发送给 EdgerOS xTaskCreate(periodic_sensor_task, "periodic_sensor_task", ESP_TASK_STACK_SIZE, NULL, ESP_TASK_PRIO, NULL);}void setup() { byte mac[6]; Serial.begin(115200); Serial.setDebugOutput(true); Serial.println(); // 初始化传感器 sensor_init(); // 革除一下按键状态机的状态 button.reset(); // 创立按键扫描线程,长按 IO0 按键,松开后ESP32 将会进入 SmartConfig 模式 sddc_printf("长按按键进入 Smartconfig...\n"); button.attachLongPressStop(esp_io0_key_task); xTaskCreate(esp_tick_task, "button_tick", ESP_TASK_STACK_SIZE, NULL, ESP_TASK_PRIO, NULL); // 启动 WiFi 并且连贯网络 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // 获取并打印 IP 地址 Serial.println(""); Serial.println("WiFi connected"); Serial.print("'ip :"); Serial.print(WiFi.localIP()); Serial.println("' to connect"); // sddc协定初始化 sddc_lib_main(&sys_cfg); // 获取并打印网卡 mac 地址 WiFi.macAddress(mac); sddc_printf("MAC addr: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]); // 应用网卡 mac 地址设置设施惟一标识 UID sddc_set_uid(G_sddc, mac);}void loop() { // 运行 SDDC 协定循环 while (1) { sddc_printf("SDDC running...\n"); sddc_run(G_sddc); sddc_printf("SDDC quit!\n"); } // 销毁 SDDC 协定 sddc_destroy(G_sddc);}配置设施信息这部分代码能够配置 WiFi 名字和 WiFi 明码,要应用的引脚,并且配置设施在 Spirit 1 上显示的信息: ...

November 16, 2021 · 3 min · jiezi

关于arduino:2021爱智先行者智能灯光开关

前言在几个月前我在 从零开始的DIY智能家居 - 基于 ESP32 的智能光照传感器_灵感桌面的博客-CSDN博客 中埋了一个坑,当初我回来填坑了!这次就把近程控灯的场景实现(偷偷通知你们,我偷偷把坑挖更大了)。当初真的能够实现自动开关灯了! 硬件抉择首先,就是翼辉的 边缘计算机 Spirit 1 边缘计算机,在这里 Spirit 1 就相当于一个小服务器,大部分的运算都在这里实现。 近程管制灯的设施,我抉择了公牛的 遥控开关 进行革新,然而我发现这个开关如同是 lora 的,我没整过 433MHz 模块,于是只能用继电器硬上了。 这继电器 挺好用的,5V就能驱动,3.3V就能触发,体积也不大,板子加继电器一共要0.13A的电流。 接线方面 开发板只有个继电器连贯就好(VCC-5V, GND-GND,T1-P14)。 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码跑的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接 clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git下载或者 clone代码后这次用到的是这个四个文件夹: cjson:我移植的 cjson 库,就是规范的 cjson 库,放到 arduino 装置目录下的 libraries 文件夹里,百度一下 cjson 的函数应用就行了。 libsddc:是我移植自官网的SDDC库和本人写的 SDK,也是放入 libraries 文件夹里就行。外面是 SDDC 协定的处理函数,咱们不必管。demo 文件夹外面就是咱们各种传感器的 demo 代码了: 红圈的 SW_sddc_sdk_demo文件夹外面就是咱们代码,点进去就能看见 SW_sddc_sdk_demo.ino 文件,双击文件会主动启动 arduino-IDE 关上代码。在工具 -> 端口 抉择对应的 COM 口而后点击上传就能够把代码烧录到板子里: 设施管制命令:通过 Spirit 1 的应用程序或者调试工具 嗅探器 向传感器设施发送的命令:触发开关: ...

November 8, 2021 · 2 min · jiezi

关于arduino:从零开始-DIY-智能家居-智能开窗器

前言做完智慧浇水器之后对这种能够节省时间和精力的场景总有一种谜之向往(懒鬼是这样的),这次我筹备做一个能够主动开窗的安装,联合之前的甲醛检测传感器就能够实现甲醛含量过高主动开窗通风,之后还能够把燃气检测、烟雾检测、一氧化碳检测、空气质量检测的各种气体传感器也接入进来,这个场景的覆盖面以及实用性也拉满了,有敌人要是还有想法能够在这个场景中接入哪些部件也能够留言给我,之后我都接入进来(快给我留言吧!求求你们了,让我室友给大伙磕头了!)。 硬件抉择板子仍然抉择超级好用,无敌便宜,资料齐全,生态欠缺之安信可 ESP32S 。 电动开窗器的抉择呢,因为我家是常见的滑动平移的窗户,淘宝上大多都是推拉的,找了半天挑了一家最便宜的进行革新 ,别问,问就是穷!(T▽T) 接线有些简单,因为这个开窗器的方向是由电流方向管制的,我就用了手边的一个三路继电器做了个电流反转的性能,接线具体如下: ESP32S-5V --- 继电器-Vcc ESP32S-GND --- 继电器-GND ESP32S-P25 --- 继电器-1路管制端 ESP32S-P26 --- 继电器-2路管制端 ESP32S-P27 --- 继电器-3路管制端 +24V 输入 --- 继电器1路两头节点 -24V 输入 --- 继电器3路两头节点 继电器1路常开节点 --- 继电器2路两头节点 继电器2路常闭节点 --- 继电器3路常开节点 继电器2路常开节点 --- 继电器3路常闭节点 继电器3路常闭节点 --- 开窗器的 +24V 输出 继电器3路常开节点 --- 开窗器的 - 24V 输出 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码跑的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接 clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git下载或者 clone代码后这次用到的是这个三个文件夹: cjson:我移植的 cjson 库,就是规范的 cjson 库,放到 arduino 装置目录下的 libraries 文件夹里,百度一下 cjson 的函数应用就行了。 libsddc:是我移植自官网的SDDC库和本人写的 SDK,也是放入 libraries 文件夹里就行。外面是 SDDC 协定的处理函数,咱们不必管。 ...

October 25, 2021 · 3 min · jiezi

关于arduino:从零开始的DIY智能家居-基于-ESP32-的智能光照传感器

前言上周出差有点急,后果家里灯没关,开了整整一周的工夫(T▽T),整个人都裂开了,筹备做一个可能近程管制灯的货色,让我当前出差能近程把家里灯关了。 第一步就是做这期的主题 - 智能光照传感器,因为我逛了一圈发现常见的能近程控灯的开关都只能单纯的开关灯的状态,并不知道以后灯的状态,小米智能灯泡又只能用他们本人的生态,我用不了。 于是我筹备应用一个智能光照传感器来感知家里的灯有没有关。 硬件抉择板子仍然用的安信可的 ESP32S ,别问,问就是便宜好用。STM完蛋去吧。 传感器用的 HB1750VI模块 ,这个模块应用 I2C 管制和通信(连贯开发板:SDA->P21,SCL->P22) 服务器用的翼辉的 Spirit 1 边缘计算机 Spirit 1 这就是一个前后端部署在一起的服务器,而后咱们手机和电脑就相当于一个远程桌面。 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码跑的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接 clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git下载或者 clone代码后这次用到的是这个三个文件夹: cjson:我移植的 cjson 库,就是规范的 cjson 库,放到 arduino 装置目录下的 libraries 文件夹里,百度一下 cjson 的函数应用就行了。 libsddc:是我移植自官网的SDDC库和本人写的 SDK,也是放入 libraries 文件夹里就行。外面是 SDDC 协定的处理函数,咱们不必管。 demo 文件夹外面就是咱们各种传感器的 demo 代码了: 红圈的 MLX90614_sddc_demo 文件夹外面就是咱们代码,点进去就能看见 MLX90614_sddc_sdk_demo.ino 文件,双击文件会主动启动 arduino-IDE 关上代码。在工具 -> 端口 抉择对应的 COM 口而后点击上传就能够把代码烧录到板子里: 具体 arduino 应用教程能够看我之前的文章 arduino开发领导 和 手把手带你 arduino 开发:基于ESP32S 的第一个利用-红外测温枪(带引脚图) 设施管制命令:通过 Spirit 1 的应用程序或者嗅探器 向传感器设施发送的命令: ...

October 18, 2021 · 3 min · jiezi

关于arduino:从零开始的DIY智能家居-基于-ESP32-的智能浇水器

前言上次 土壤湿度传感器 实现之后,就立下一个 flag 要搭建一个智慧浇水的智能场景,当初终于有工夫填坑了!(o゚▽゚)o 智慧浇水场景的外围设施有三个:检测土壤状态的:土壤湿度传感器 通过这个传感器来获取土壤信息,作为是否浇水的根据。智能浇水器:执行安装,通过 Spirit 1 管制。Spirit 1 这次就来制作智慧浇水的智能场景的外围: 智能浇水器,我筹备买一个便宜的傻不拉几的浇水器本人革新一下,想方法给他连上脑子。次要交互流程如下图: (゚∀゚)..:*☆哎哟不错哦,是不是很厉害啊!

October 9, 2021 · 1 min · jiezi

关于arduino:从零开始的DIY智能家居-基于-ESP32-的土壤湿度传感器

前言自从上次做了那个 甲醛传感器 和 水浊度传感器 之后开始尝到智能家居的苦头了,这两货色有没有用我不晓得,然而没事的时候掏出手机瞄两眼,看着就让人很安心( ̄︶ ̄)↗。 于是懈怠的我开始推敲把给动物浇水这件事件找个法子偷一下懒,也给它智能化了。这样我就不必每天浇水,间接给水桶灌水就行。 因为土壤湿度传感器的应用办法和水浊度传感器差不多,我就用水浊度传感器的代码改了改,做了一个土壤湿度传感器。 硬件抉择这次开发板还是和水浊度传感器一样,仍然还是用着安信可的 ESP32S ,别问,问就是便宜 24元 传感器用的 DFrboot 的 土壤湿度传感器 35元 服务器用的翼辉的 Spirit 1 ,799元,这玩意就是一次性投入上次买了之后,前面所有的设施都能够用它,作为服务器。 传感器接线:应用 A0 管制(SVP/IO36),电源接3.3-5V都能够。A -> A0 (SVP/IO36)VCC -> 3.3 - 5VGND -> GND 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码跑的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接 clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git要是连 git 是什么都不晓得,能够参考简略无脑,上手即用 - 手把手教你应用 智能红外温度传感器代码以及依赖的 gitee 库!下载或者 clone代码后这次用到的是这个三个文件夹: cjson:我移植的 cjson 库,就是规范的 cjson 库,放到 arduino 装置目录下的 libraries 文件夹里,百度一下 cjson 的函数应用就行了。 libsddc:是我移植自官网的SDDC库和本人写的 SDK,也是放入 libraries 文件夹里就行。外面是 SDDC 协定的处理函数,咱们不必管。 demo 文件夹外面就是咱们各种传感器的 demo 代码了:红圈的 SEN0193_sddc_demo文件夹外面就是咱们代码,点进去就能看见 SEN0193_sddc_sdk_demo.ino 文件,双击文件会主动启动 arduino-IDE 关上代码。在工具 -> 端口 抉择对应的 COM 口而后点击上传就能够把代码烧录到板子里: ...

October 9, 2021 · 3 min · jiezi

关于arduino:从零开始的DIY智能家居-基于-ESP32-的智能水浊度传感器

前言家里有个鱼缸养了几条鱼来玩玩,然而换水的问题着实头疼,常常一个不留神就遗记换水,鱼儿就没了。o(╥﹏╥)o 在取得 Spirit 1 边缘计算机 后就相当于有了一个人智能设施服务器,能够本人开发在家里开发智能设施,于是筹备做一个智能水浊度传感器来解决一下我这个换水难的问题。 目前的想法就是看看水啥时候更换了揭示我一下手动换水,主动换水过滤的设施太贵了 ,穷逼只能看看怎么 DIY 一套。 硬件抉择这次仍然还是用着安信可的 ESP32S ,别问,问就是便宜,至于那个 IOT PI ?曾经被我做成智能甲醛检测器 塞柜子外面去了 ,有趣味的敌人能够去看看哦!把 IOT PI 换成ESP32S 老本也就60块钱。传感器用的 DFrboot 的水浊度传感器。服务器用的翼辉的 Spirit 1 。 我是不是该让安信可 给我广告费啊?天天用他家板子 ̄ ̄=,我抉择安信可的具体起因能够看arduino开发领导 和 手把手带你 arduino 开发:基于ESP32S 的第一个利用-红外测温枪(带引脚图) 外面还有很具体的 arduino 入门教程。 传感器接线:应用 A0 管制(SVP/IO36),电源接5V。 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码跑的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接 clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git要是连 git 是什么都不晓得,能够参考简略无脑,上手即用 - 手把手教你应用 智能红外温度传感器代码以及依赖的 gitee 库!下载或者 clone代码后这次用到的是这个三个文件夹: cjson:我移植的 cjson 库,就是规范的 cjson 库,放到 arduino 装置目录下的 libraries 文件夹里,百度一下 cjson 的函数应用就行了。 libsddc:是我移植自官网的SDDC库和本人写的 SDK,也是放入 libraries 文件夹里就行。外面是 SDDC 协定的处理函数,咱们不必管。 ...

October 9, 2021 · 3 min · jiezi

关于arduino:同人逼死官方系列从-DDC-嗅探器到-sddcsdklib-的数据解析

从 DDC 嗅探器到 sddc_sdk_lib 的数据解析之前的 DDC 协定介绍 次要讲了设施退出、退出以及维持设施状态,而 SDK框架 sddc_sdk_lib 解析 次要讲了 SDK 库的构造和如何应用这个库,DDC 协定嗅探器 则介绍了一个前端构筑报文,对于具体的消息报文没有具体的阐明介绍。 这篇文章就着重讲一下消息报文的传输和解决流程。从之前写的 DDC 协定嗅探器 构建报文开始到嵌入式设施中 sddc_sdk_lib 对音讯解决解析,全面的解说下 message 音讯在整个 Spirit 1 网络中的传递门路以及数据在 sddc_sdk_lib 中是如何被一步一步解析的。 感觉本人真是太厉害了!(叉腰) DDC 协定嗅探器中的音讯构建以及传输嗅探器工具和 SDDC 的代码,老样子都放在了灵感桌面的机密宝库 中(不会应用 Git 的敌人请看简略无脑,上手即用 - 手把手教你应用 智能红外温度传感器代码以及依赖的 gitee 库!)。 前端的主页面代码在 ui/src/views/DeviceMessage.tsx 中,应用的 vue 以及 vant 库来开发,前端构建好 json 报文调用 sendMessage() 办法即可,其中调用 this.$api.sendMessage(this.clientMessage) 来向后端发送 http 申请; private async sendMessage() { const res = this.checkClientMessage(); if (!res) return; let len = 0; if (this.clientMessageType === 'array') { len = (this.clientMessage as IValueType[]).length; } else { len = Object.keys(this.clientMessage).length; } if (!len) { return edger.notify.error('发送数据不可为空!'); } try { const res = await this.$api.sendMessage(this.clientMessage); } catch (error) { edger.notify.error('发送数据失败!') } }后端在 eap/main.js 中会解决前端 http 申请传递的数据并调用 device 模块中的 device.send 办法将音讯通过 EdgerOS 向硬件设施发送音讯; ...

September 23, 2021 · 3 min · jiezi

关于arduino:同人逼死官方系列基于sddc-协议的SDK框架-sddcsdklib-解析

基于sddc 协定的SDK框架 sddc_sdk_lib 解析之前在移植 libsddc 库的时候感觉官网 demo 太低效了( ̄. ̄),复制粘贴代码好累,而且写出一个BUG,其余复制的代码整个就裂开了,于是写了一个 sddc_sdk_lib 库, 让 sddc 接入设施更加疾速无效,本文就次要解说一下这个库的结构以及新设施通过该库疾速的应用 sddc 接入 Spirit 1,从而变成一个智能设施。ヽ(・・´メ) 对于 SDDC 协定的介绍能够参考:对立了 WiFi 和 ZigBee 下层应用的跨厂商发现与管制 DDC协定介绍 目前 sddc_sdk_lib 反对三个平台别离是提出 sddc 协定的翼辉信息公布的 MS-RTOS、安信可基于 FreeRTOS 的ESP平台、还有就是最近比拟火的 Arduino 平台(这货色是真好使。习惯 Arduino 之后齐全不想用传统平台了),老样子货色都放在了灵感桌面的机密宝库 。 SDDC 构造以及各类设施的定义在 SDDC_SDK_lib.h 中,SDDC 整体构造形容如下: /********************************************************************************************************* SDDC整体构造形容*********************************************************************************************************/typedef struct { char *token; DEV_INFO *devinfo; IO_DEV_REGINFO *io_dev_reg; int io_dev_reg_num; NUM_DEV_REGINFO *num_dev_reg; int num_dev_reg_num; DEV_STATE_GET *state_get_reg; int state_get_reg_num; DIS_DEV_REGINFO *dis_dev_reg; int dis_dev_num;} SDDC_CONFIG_INFO;其中 DEV_INFO 中的内容是通过 SDDC 上报到 Spirit 1的信息,例如设施名称、设施类型、形容等: ...

September 23, 2021 · 4 min · jiezi

关于arduino:arduino-使用-analogRead-读取不到数据digitalRead-却可以正常读取

我的项目场景:最近在应用安信可的 ESP32S P14 引脚(ADC 16)读取一个电路状态的时候遇到一个问题,电路状态不是很稳固,在高电平的时候,会忽然呈现毫秒级的稳定,呈现短暂的低电平,造成设施状态翻转,然而稳定最低电压也不会到0,于是我想到应用 analogRead() 读取模拟量,代替 digitalRead() 的数据量。 可是 analogRead() 读出来的数据却是 0 ,digitalRead() 和 万用表都显示引脚电压却是没有问题。这就十分奇怪了 问题形容:我先形象了一个简略的 digitalRead() 和 analogRead() 读取模型,发现 P14 引脚(ADC 16)是能够进行模拟量和数据量的读取的,analogRead() 读取模拟量甚至能够不初始化为 INPUT 模式也能够读取,阐明,这个引脚的确是 ADC 引脚。 可是这就没什么代码和流程,我整个复制到我利用的代码外面去获取模拟量,仍然读取不到数据。 void setup() { Serial.begin(115200); pinMode(water_pin, OUTPUT); pinMode(sign_pin, INPUT); pinMode(monitor_pin,INPUT);}void loop() { // printf("\n digitalRead == : %d!!!!!\r\n", digitalRead(sign_pin)); Serial.println(); printf("\n analogRead == : %d!!!!!\r\n", analogRead(sign_pin)); // 读取没问题 Serial.println(); delay(100);} 起因剖析:我在援用代码加打印的时候发现,在初始化引脚的时候的确是能够读取模拟量的,可是启动 WiFi 模块之后就读取不到了,我狐疑 arduino 在初始化 WiFi 的时候会把局部 ADC 引脚初始为 数字量模式,我测试了一下 P14(ADC16) 和 P27(ADC17) 都有这个问题,然而 SVP(ADC0) 没问题。这大略是这个初始化流程移植 arduino 上的时候保留了 UNO板子的个性(0-5 为模拟量) ...

September 23, 2021 · 1 min · jiezi

关于arduino:手把手搭建自己的智能家居-智能红外人体传感器

前言自从有了 Spirit 1 这个超便宜的集体智能设施服务器,就能够本人在家制作智能家居设施,几乎就是DIY党的福音!ヾ(●゜ⅴ゜)ノ 棒棒哒! 上次做了一个 智能红外测温模块 感觉真有意思,有点上头了,满脑子寻思着还能做点啥玩玩,发现手边正好有一个红外人体传感器,感应进入范畴的人体红外信号,输入数字量0 1,能够间接接入 arduino ,这货色感觉能够配合很多其余的设施实现 combos。这次就简略的来做一个智能红外人体传感器吧! ヾ(✿゚▽゚)ノ 硬件抉择开发板抉择和之前的 红外测温枪 完全一致,安信可 ESP32S 开发板,至于我为什么抉择这个开发板,或者想抉择理解其余开发板的敌人能够看 arduino开发领导 和 手把手带你 arduino 开发:基于ESP32S 的第一个利用-红外测温枪(带引脚图)外面有我举荐这块开发板的起因和 arduino 开发入门,必定能帮忙你从零开始学习arduino。相对不是想援救那可悲的浏览量!相对不是!(拍桌子,震声!︵╰(‵□′)╯︵┻━┻) 而传感器局部我抉择了 HC-SR501 人体红外感应电子模块 起因嘛,便宜 (=´`=)才五块钱。要是我有钱也不必本人搭建智能家居环境了 代码解析获取代码为了不便解说逻辑,我会打乱代码的程序可能还会进行裁剪,要是想间接拿代码的敌人能够间接去 灵感桌面的机密宝库 获取代码,或者间接clone: https://gitee.com/inspiration-desktop/DEV-lib-arduino.git这次用到的是这个三个文件夹:cjson:我移植的 cjson 库,就是规范的 cjson 库,放到 arduino 装置目录下的 libraries 文件夹里,百度一下 cjson 的函数应用就行了。 libsddc:是我移植自官网的SDDC库和本人写的 SDK,也是放入 libraries 文件夹里就行。外面是 SDDC 协定的处理函数,咱们不必管。 demo 文件夹外面就是咱们各种传感器的 demo 代码了:红圈的 XKC_sddc_sdk_demo 文件夹外面就是咱们代码,点进去就能看见 XKC_sddc_sdk_demo.ino 文件,双击文件会主动启动 arduino-IDE 关上代码。在工具 -> 端口 抉择对应的COM口而后点击上传就能够把代码烧录到板子里:具体 arduino 应用教程能够看我之前的文章 arduino开发领导 和 手把手带你 arduino 开发:基于ESP32S 的第一个利用-红外测温枪(带引脚图) ...

September 13, 2021 · 3 min · jiezi

关于arduino:红外测温枪超进化智能温度传感器基于-arduino-的智能测温模块

前言之前用 arduino(arduino 开发制导) 做了一个傻了吧唧的 红外测温枪,起初又照着 Spirit 1 官网文档胜利做进去一个能让设施和 Spirit 1 通信的 调试用 demo,尽管 BUG 有亿点点多,然而!好歹能用了! ( )牛逼!!!,通信解决了,服务器有了,那不得开始 搞事件!!!(>◡<) 开始利用 Spirit 1 做一个能通过手机管制和查看的智能红外测温模块。 硬件抉择硬件与之前的 红外测温枪 完全一致,安信可 ESP32S 开发板+ GY906 (MLX90614ESF ) 红外测温传感器。具体介绍和引脚图能够看之前红外测温枪的文档。 而 Spirit 1 的应用和介绍能够看我之前的 搭载着EdgerOS 的 Spirit 1 开箱 和 超便宜的集体智能设施服务器!-- 边缘计算机 Spirit 1 初体验,也是淘宝就能搜到。 代码解说我本人移植了一个他们的 sddc 库,在 Spirit 1 官网的 demo 的根底上对 arduino 做了适配,接入了红外测温枪流程。 通过 SDDC 协定接入 Spirit 1 局部在 setup 函数中初始化 SDDC 协定,而后在 loop 函数运行 SDDC 协定主循环, ...

September 6, 2021 · 3 min · jiezi

关于arduino:arduino-使用自制库时报错提示未定义的引用

我的项目场景:arduino 应用自制库时报错提醒:未定义的援用问题形容:编译过后,提醒在库的.o中有个函数未定义,个别这种谬误是因为编译器找不到函数实现导致的,个别产生起因的头文件没蕴含,或者头文件程序谬误,谬误导致,可是我查了半天头文件之后确定头文件没有问题,函数实现也有 起因剖析:查看过头文件和函数实现之后,确认不是这个问题,在 arduino IDE 文件->首选项 中关上编译具体打印后,我发现大部分编译用的是 g++ 指令,难道 IDE 把我程序当 C++ 程序编译了,又查了一些材料后发现 ,arduino 的确更偏差于 C++ ,而我的库是纯 C库。 解决方案:尽管不晓得为啥 arduino IDE 报错为什么是函数未定义。我之前应用的 C库为啥没出过这个问题,不过最初我在头文件中加了 extern "C" 解决了这个问题。

September 2, 2021 · 1 min · jiezi

关于arduino:手把手带你-arduino-开发基于ESP32S-的第一个应用红外测温枪带引脚图

前言在上一篇文档 arduino开发领导 的时候介绍了什么是 arduino 以及 arduino 开发环境的搭建,然而仅仅是简略提及了一下应用官网的 demo 验证板子起来了,当初来尝试写第一个简略的 arduino 利用:红外测温枪。︿( ̄︶ ̄)︿ 设施抉择这里我抉择的是之前举荐的安信可 ESP32S 开发板 传感器用的 GY906 (MLX90614ESF )。通信形式是 I2C (IIC)会用到 ESP32S 的 P21 引脚(对应 I2C 的 SDA) 和 P22 引脚 (对应 I2C 的 SCL)。这里发一下 安信可官网的 ESP32S 引脚图:这里并不能看出 I2C 引脚 (-_-||)这是帮忙我找到 I2C 引脚的引脚图(感激知乎的兄弟分享o( ̄▽ ̄)d):这是 DF家的 ESP32E 引脚,基本上差不多,也很有参考价值: 二、应用步骤1.导入库上一篇文档 有具体的抉择库的教程,这里我次要说一下如何导入网上找的第三方库。 简略一点就是把库文件夹,放到arduino装置目录下的 libraries 文件夹里:而后在 arduino-IDE 中增加即可: 2.读入数据MLX90614ESF 库写得曾经十分欠缺了,咱们不须要再去配置什么 I2C 地址和命令,只有在 setup 之前申明一个 mlx 类, Adafruit_MLX90614 mlx = Adafruit_MLX90614();而后间接调用对应的接口就能够启动传感器 // 启动红外模块 mlx.begin();获取数据 double readObjectTempC(void); // 获取指标的摄氏温度 double readAmbientTempC(void); // 获取周围环境的摄氏温度 double readObjectTempF(void); // 获取指标的华氏温度 double readAmbientTempF(void); // 获取周围环境的华氏温度之后在 steup 中设置波特率,而后在 loop 通过串口将数据打印进去就行 ...

August 30, 2021 · 1 min · jiezi

彩屏显示入门二颜色设置与文本显示-ESP32学习之旅Arduino版

本系列历史文章目录: ESP32 概述与 Arduino 软件准备ESP32 GPIO接口编程入门蓝牙翻页笔(PPT 控制器)新冠肺炎疫情数据实时显示器B 站粉丝计数器Siri 语音识别控制 LED 灯Siri 语音识别获取传感器数据彩屏显示入门(一):驱动库设置与彩屏效果展示 距离上一篇彩屏显示入门,已经拖更了一个月了。在上一篇中,我们讲解了 ESP32 的彩屏驱动库 TFT_eSPI 的安装与配置方法,并给大家展示了几个彩屏显示的案例,但是并没有教大家如何对彩屏进行编程。那么从这次课程的内容,就教大家 TFT_eSPI 库的最基本的编程方法,比如如何设置颜色以及如何显示文字等。 话不多说那就开始吧。 材料准备这次的教程也是入门教程,所以除了 ESP32 开发板和彩屏之外,并没有其他的传感器材料。ESP32 开发板和彩屏的选型与上次教程一致。ESP32 开发板仍然以 FireBeetle-ESP32 为例,彩屏选择的还是 ILI9341 2.4 寸 TFT_LCD 彩屏,分辨率为 240×320。如果不明白的地方,可以回去看上一篇教程:彩屏显示入门(一):驱动库设置与彩屏效果展示。 既然材料都是一样的,所以接线图和彩屏库的配置也是一样的,这里不再赘述。 彩屏初始化在使用彩屏之前,我们先要做一些初始化相关的工作。先来看一下初始化相关代码: #include <SPI.h>#include <TFT_eSPI.h>TFT_eSPI tft = TFT_eSPI();void setup() { tft.init(); tft.fillScreen(TFT_BLACK);}void loop() {}本教程使用的彩屏接口是 SPI 接口,所以先要引入 SPI.h 库文件,然后再引入彩屏驱动 TFT_eSPI.h 库文件。接着定义一个彩屏对象 TFT_eSPI tft = TFT_eSPI(),将这个彩屏对象命名为 tft,方便后面调用。当然这里的名称可以随便取,方便记忆即可。 然后在 setup() 中调用 tft.init() 对彩屏进行初始化,注意这里的 tft 就是我们上面定义的彩屏名称,后面也是一样,不再说明。至此,其实彩屏的初始化已经完成了,不过在后面我们还再加一句代码:tft.fillScreen(TFT_BLACK),用来配置彩屏初始化的颜色。这里应该比较容易理解,我们希望初始化之后的屏幕颜色为黑色(TFT_BLACK),你也可以设置为其他颜色,比如红色(TFT_RED)、绿色(TFT_GREEN)等,如下图所示。 ...

June 22, 2020 · 4 min · jiezi

还在羡慕大疆-RoboMaster-S1技术宅教你自制全向麦克纳姆轮战车

先来看一下成品照片: 再来看一下演示视频(点击链接查看演示视频): https://www.bilibili.com/video/BV1nW411D7VM/ 世界万物,皆有源起,一个事物没有外力的情况下,它会始终保持原状,但是当它和另一个事物相结合后,就会有一个全新的事物诞生。比如: 当奇点遇上大爆炸便诞生了宇宙 当大黄鸭遇上平底锅便诞生了烧鸭 当蝙蝠遇到土豪便诞生了蝙蝠侠 当小鲜肉遇到高卡路里快餐便诞生了肥宅 当照片遇到 PS 便成了“照骗” 接下来我们来感受一个场景:当你深夜回家,在小区的转了一圈又一圈,好不容易找到一个车位,但是发现前面的车乱停,剩下的空档大小正好只能停放你的车,连一点空隙都不给你,你说怎么办? 但是,眼睁睁的看着一个车位 就是停不进,是不是很不爽?是不是很火?是不是感到整个世界对你深深的恶意?甚至开始怀疑人生? 于是,新的组合开始了,你有没有想过,当横行霸道的螃蟹遇到了汽车 会发生什么? 这就是神奇的麦克纳姆轮,确认过眼神,遇见对的轮,感受一波神奇的操作:横向入库。 麦克纳姆轮(下文简称“麦轮”)的神奇全向行动能力,一直是众多机器人的首选方案,例如 RoboMaster 机甲大师比赛中,各种机器人车轮便采用的就是麦克纳姆轮。 但麦轮动戈几百的价格,让热爱它的小伙伴们望而却步。那是否麦轮就与我们普通创客爱好者没有关系、太遥远了呢?当然不是,本教程就教你自制麦轮,并用麦轮设计出一辆麦轮战车。只要你身边有 3D 打印机和激光切割机(可选),那么就跟我一起制作出一辆麦克纳姆轮全向小车吧! 是不是很心动了呢?别犹豫了,拿起你的工具,准备好你的 3D 打印机,准备开干吧! 自制麦轮首先你要准备好如下材料和工具: 材料: 26mm 长标准大头针,每个轮子需要 9 枚,共 36 枚3D 打印麦轮零件(包含大轮和从动轮)9mm 热缩管工具: 热风枪502 胶水美工刀镊子1、将麦轮模型用 3D 打印机打印出来,每个轮子由 1 个大轮与 9 个从动轮组成。左旋与右旋模型各打印两个,从动轮左右通用打印 4×9=36 个,如下图所示。 2、① 将热缩管裁剪至适当长度套在小从动轮上,② 用镊子夹住使用热风枪加热热缩管,使热缩管受热缩紧,③ 最后使用美工刀将边缘多余部分热缩管割掉。如下图所示。 3、用大头针穿过从动轮并固定在大轮上,确保足够顺滑即可,如下图所示。 5、重复上述步骤,如下图所示,麦克纳姆轮就制作完成啦! 6、接下来是制作麦轮战车底盘。用塑料销钉和电机固定座将 4 个 N20 减速电机分别固定在激光切割的木板底盘上,将麦轮安装在电机轴上,如下图所示,底盘就完成啦。 ...

June 9, 2020 · 1 min · jiezi

手把手教你制作ESP8266物联网创意点阵时钟女朋友看了都想要

本文作者:默 前段时间我在网上看到了一款很有意思的点阵时钟,它可以播报天气,查看 YouTube 的订阅数,还有好看的时间动画。你可以把它当做普通闹钟,也可以连接蓝牙把它当做音箱来使用。它的许多功能都很有意思,其中我最喜欢的是它的时间显示动画效果,然而它一千多的价格让我望而却步,放弃了入手的打算。不过既然身为创客,我为什么不制作一个属于自己独一无二的创意网络时钟呢? 说干就干,于是我就做了一个创意点阵时钟,先来看一下演示视频吧(点击链接跳转B站查看演示视频): https://www.bilibili.com/video/BV12v411z7sJ/ 预期目标及功能网络自动校准时间无网络连接时及时反馈一键配置时钟网络自定义精美时间显示字体时间显示动画亮度自动调节时段提示材料清单ESP8266 Wemos mini 开发板 1 块;杜邦线若干;4 合 1 点阵模块;激光切割外壳;栎木滑面仿木纹贴纸。 电路原理图电路连接关系如下图所示: 结构拼装将 USB 数据线按下图所示方向由外壳背部插入开发板,使用热熔胶将开发板固定到木板上,保持稳定直到热熔胶凝固,主要热熔胶不要碰到数据线。 将外壳前部与点阵屏按下图所示方式放置入面板凹槽,使用热熔胶固定点阵,保持稳定直到热熔胶凝固。 然后使用杜邦线按原理图正确连接电路,并拼接外壳底部与左右两侧,最后将外壳顶部进行封顶。 剪切合适大小的栎木滑面仿木纹贴纸,粘贴至外壳表面。注意留出点阵位置,可以适当使用刻刀雕刻出 USB 下载接口,以便进行供电及程序下载或更新。 程序设计下面开始详细讲解程序设计过程。 开发环境我们使用 Aduino 软件来编写本项目的程序,开发板选择 ESP8266 类型。至于如何在 Arduino 中配置 ESP8266 的开发环境,不在本文的介绍范围,请自行查阅相关资料。 程序思路为了达到我们的预期目标,我们先绘制功能的思维导图,再根据思维导图逐步实现创意点阵时钟的程序设计。 下面我们将具体讨论创意点阵时钟各个子功能是如何实现的。 获取网络时间作为一个时钟,最重要的功能当然是显示时间啦。那么该如何从网络获取时间呢? 下面的例子演示了如何获取网络时间并将时间保存在变量中,其中 ESP8266WiFi.h 库的功能是连接网络,NtpClientLib.h 库的功能是获取 NTP 服务器的网络时间,SimpleTimer.h 库是用来设置定时器每秒刷新一次时间。该例子并没有串口打印当前时间,你可以添加串口打印相关代码用来调试程序。 #include <ESP8266WiFi.h>#include <NtpClientLib.h>#include <TimeLib.h>#include <SimpleTimer.h>SimpleTimer timer;const PROGMEM char *ntpServer = "ntp1.aliyun.com";int8_t timeZone = 8;volatile int hour_variable;volatile int minute_variable;volatile int second_variable;void Simple_timer() { hour_variable = NTP.getTimeHour24(); minute_variable = NTP.getTimeMinute(); second_variable = NTP.getTimeSecond();}void setup() { Serial.begin(9600); WiFi.begin("ssid", "password"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("Local IP:"); Serial.print(WiFi.localIP()); NTP.setInterval(600); NTP.setNTPTimeout(1500); NTP.begin(ntpServer, timeZone, false); timer.setInterval(1000L, Simple_timer);}void loop() { timer.run();}点阵屏显示库:MD_ParolaMD_Parola 是 MAX7219 点阵屏的模块化滚动文本显示库,其主要特点如下: ...

June 6, 2020 · 4 min · jiezi

LarduinoISP-for-LGT8FX8D-SWD通信协议源码简析

LGT8FX8D/P系列的CPU可以指令级兼容avr芯片,引脚定义也相近.将avr的程序移植到LGT8FX8D/P只需作少量的修改,而且增强了一些性能,价格却更低,性价比高.要将程序写入空片,其flash烧写方式与avr并不一样,需要专门的调试下载器.使用说明在LarduinoISP for LGT8FX8D公开了份代码,其中实现了通过SWD接口实现LGT8FX8D的读写.我们通过阅读这份代码来看看通过SWD通信方式来实现flash烧写的过程. SWD通信硬件要求需使用的引脚: 引脚传输方向描述SWD输入与输出用作传输数据比特,双向SWC输出用作时钟信号RST输出SWD模式时RST拉低SWD对应PB5,SWC对应PB4,RST对应PB2 #define SWDIF_PIN PINB#define SWDIF_DIR DDRB#define SWDIF_PORT PORTB#define SWDIF_CLK (1 << 5) // PB5#define SWDIF_DAT (1 << 4) // PB4#define SWDIF_RSTN (1 << 2) // PB2SWD通信时序分析所有时序的实现,由CPU操作IO口完成. 通信速率在一个通信时钟周期会调用二次SWD_Delay()即$12*2$个NOP指令,再加上设置SWC SWD电平的指令,总约需30个指令周期,在16MHz的系统时钟下,通信速率可达500Kbps.如果一个位输出中有更多的逻辑操作,则通信频率会更低一些. #define SWD_Delay() do {\ NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); \ NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); \} while(0); //一个时钟周期的模拟 SWC_CLR(); SWD_Delay(); SWD_CLR(); SWD_Delay(); SWC_SET(); SWD_Delay();通信时序数据通信由起始位SWD_CLR开始,然后是输出一个字节是由一串8比特数据加一个结束位SWD_SET组成,如有多个字节输出,则中间结束位为SWD_CLR,最后的结束位为SWD_SET.每个字节的先输出最低位,再到最高位的顺序输出,即LSB. 双向引脚SWD输出数据时,在时钟SWC低电平时改变SWD输出数据,写入目标芯片会在SWC的上升沿检测SWD数据. void SWD_WriteByte(uint8_t start, uint8_t data, uint8_t stop){ volatile uint8_t cnt; if(start) { SWC_CLR(); SWD_Delay(); SWD_CLR(); SWD_Delay(); SWC_SET(); SWD_Delay(); } // send data for(cnt = 0; cnt < 8; cnt++) { SWC_CLR(); if(data & 0x1) SWD_SET(); else SWD_CLR(); SWD_Delay(); data >>= 1; SWC_SET(); SWD_Delay(); } SWC_CLR(); if(stop) SWD_SET(); else SWD_CLR(); SWD_Delay(); SWC_SET(); SWD_Delay();}双向引脚SWD输入数据时,在时钟SWC高电平时设为输入并上拉,由写入目标芯片控制SWD,在SWC的下降沿检测SWD数据. ...

November 3, 2019 · 2 min · jiezi

修改LGT8F328P的Arduino-BOOTLOADER支持波特率115200bps

从Larduino_HSP取得的LGT8F328P的bootloader通过串口与主机通信,其波特率为57600bps.修改更新的波特率可以提高写入速度,节省时间.如果直接在Makefile修改为 115200bps的话 BAUD_RATE_CMD = -DBAUD_RATE=115200编译会有波特率偏移超过2%的提示,可能会影响通信. 警告: #warning BAUD_RATE error greater than -2% [-Wcpp]这里主要修改两个地方,以更好的工作在115200bps. 1. 启用倍速功能倍速工作模式 通过设定 UCSRA 寄存器的 U2X 位可以是传输速率加倍,该位只在异步工作模式下有效,同步工作模式下置该位为“0”。设置该位将会把波特率分频器的分频值减半,有效地加倍异步通信的传输速率。在这种情况下,接收器只使用一半的采样数来对数据进行采样及时钟恢复,因此需要更精准的波特率设置和系统时钟。发送器则没有变化。参考手册,启用倍速功能,此时波特率计算公式为 工作模式波特率计算公式UBRR 值计算公式异步倍速模式$${\rm BAUD} = \frac{\large f_{\rm sys}}{\quad 8({\rm UBRR}+1)\quad }$$$${\rm UBRR} = \frac{\large f_{\rm sys}}{\quad 8{\rm BAUD}\quad } - 1$$当系统时钟为16000000,波特率取115200时,依公式$${\rm UBRR} = \displaystyle \frac{16000000}{8*115200} - 1 \approx 16.36$$UBRR将被赋值为0x10.此时实际的波特率约为$${\rm BAUD} = \displaystyle \frac{16000000}{\quad 8(16+1)\quad }\approx 117647$$ 偏差$$\frac{115200-117647}{115200}\approx -2.1\%$$ 在optiboot.c中修改代码: int main(void) {... UART_SRA = _BV(U2X0); //Double speed mode USART0 UART_SRL = (uint8_t)( F_CPU / (BAUD_RATE * 8L) - 1 );...}2. 调整系统时钟频率内部 RC 振荡器校准 LGT8FX8P 内部包含两个可校准 RC 振荡器,经过校准后,均可达到±1%以内的精度。其中 32MHz RC 默认用于系统工作时钟。LGT8FX8P 出产前,内部 32MHz HFRC 和 32KHz LFRC 都进行了校准,并把校准值写入系统配置信息区域。系统上电过程中,这些校准值将会被读入到内部寄存器中,通过寄存器实现对 RC 频率的重新校准。bootloader的系统时钟源使用的是内部 32MHz HFRC,并通过设置32MHz HFRC 振荡器校准寄存器- RCMCAL,达到±1%以内的精度.为使串口通信速率更接近115200bps,这时我们通过调整系统时钟来调整波特率.依前面公式,输出标准115200bps时,系统时钟最佳值为:$$\large f_{\rm sys} = {\rm BAUD}*{8({\rm UBRR}+1)}=115200*8(16+1)=15667200$$通过修改寄存器CLKPR的CKOEN0位,在PB0上检测系统时钟频率.以下为实测的经验数据: ...

November 2, 2019 · 1 min · jiezi

mblock是如何让Arduino工作的上

从官网原版 DEMO 到 用熟悉的语言来写 DEMO ,如何用更容易让小朋友理解的方式来实现这个 DEMO 呢?今天开始陆续研究这整个过程如何实现。在这之前了解过一些方案,例如 s4a 等一些其它方案,没有深入了解,从界面等方面来看基本都是基于 Scratch 2 来做的开发,Scratch 3 优化的更漂亮些来,有没有基于 Scratch 3 的解决方案呢?本文暂时以自己看到的内容加上自己的理解,后续按照实际的研究情况更新。 mblock无意之间发现了 mblock ,在 Scratch 的基础上做了一些二次开发,选择设备模块,然后基于设备定制了一些元素,方便用户更直接的使用设备。 编辑器内选择设备 Arduino系统内安装 mlink 驱动程序启动 mlink编辑器内连接☑️ 显示全部可连接设备选择设备端口 /dev/tty.usbmodem14101连接成功积木编程上传到设备原理分析它是如何工作的?为什么它通过访问网页版本,然后能直接将积木程序转换为可执行代码。mlink 在这个过程中起到了关键性作用,本地启动的 mlink 是在本地起了一个 websocket 服务。 在第四步中连接的时候实际上是建立了一个与 mlink 的服务连接 ws://127.0.0.1:55278/socket.io/?EIO=3&transport=websocket&sid=-XJBr-WPFDcGSJH6AAAF在选择设备前,一直在发心跳命令查询设备端口 getDevices选择设备端口以后,发送了一个 open 命令,这一步编辑器已经与 Arduino 建立了连接上传设备操作实际上是建立了一个 wss://arduinoserver.makeblock.com/socket.io/?EIO=3&transport=websocket&sid=xDKoLUykR3DtjL5DAG1O 连接,这一步具体做了什么?代码又是以什么形式上传到设备上去的?这里还有一些疑问需要继续深入研究一下协议层面的内容 末了大致有了想法,但是对于 mblock 的整个逻辑还是有一些没有理解到,还需要继续深入研究一下才能完善。

September 11, 2019 · 1 min · jiezi

如何用熟悉的语言玩转Arduino

今天上班有些忙,时间不是太多,借助空隙时间学习了一下如何用自己喜欢的语言来玩 Arduino。 FirmataArduino 可以通过 Firmata(PC 与 MCU 通讯协议) Library 来实现与计算机应用程序的通信。我么可以使用自己喜欢的语言来实现一段程序,然后将程序写入到 Arduino 中。我们首先需要将 Firmata 协议烧写到芯片中。 烧写协议Arduino IDE > 文件 > 示例 > Firmata > StandardFirmata 按照上述路径找到标准协议,然后上传至 Arduino 端口查找以下两种方式任选其一: Arduino IDE > 工具 > 端口命令行工具中输入 ls /dev/tty.usb* 按 tab 按照上述路径找到端口,后续通过 Firmata 协议与 Arduino 连接的时候需要使用该端口值。这里我们得到我的设备的端口为 /dev/tty.usbmodem14101 编写程序这里我使用的是 javascript 来编写昨天的 Blink firmata.jsfirmata.js const Firmata = require('firmata');const port = '/dev/tty.usbmodem14101';const ledPin = 2;const board = new Firmata(port);board.on('ready', () => { console.log(`connet ${port}`); let status = 0; setInterval(() => { status = !status + 0; board.digitalWrite(ledPin, status); }, 1000);});johnny-fivejohnny-five ...

September 10, 2019 · 1 min · jiezi

Arduino-制作第一个单LED闪烁电路

做这个实验前我们要先认识 Arduino ,接触面包板,了解电路中的元件的工作电压和工作电流等。 实验材料本次实验需要以下零部件 ArduinoLED 灯一枚电阻一枚连接线三根面包板一个认识 Arduino我需要先了解以下 Arduino 板上的组件具体由什么构成。我找了一个参考图。 序号名称描述 工作电压5V1电源 USBArduino 板可以通过计算机上的 USB 线供电2电源 电池插座Arduino 可以通过电池电源供电3稳压器稳压器的的功能是控制提供给 Arduino 的电压,并稳定处理器和其他元件使用的直流电压4晶体振荡器晶体振荡器帮助 Arduino 处理时间问题。上面有数字标识 T16.000 代表频率是 16MHZ5,17重置重置 Arduino6,7,8,9引脚3.3V(6) 提供 3.3V 输出电压;5V(7) 提供 5V 输出电压;GND(8) 接地;VVin(9) 此引脚可以用于外部电源为 Arduino 供电10模拟引脚A0-A5 这些引脚可以从模拟传感器读取信号,并将其转换为可以由微处理器读取的数字值11微控制器Arduino 的大脑12ICSP 引脚大多数情况下,ICSP(12)是一个 AVR,一个由 MOSI,MISO,SCK,RESET,VCC 和 GND 组成的 Arduino 的微型编程头。它通常被称为 SPI(串行外设接口),可以被认为是输出的“扩展”。实际上,你是将输出设备从属到 SPI 总线的主机。13电源 LED 指示灯Arduino 插入电源时,此灯亮说明电路板正常通电14TX 和 RX LED在你的板上,你会发现两个标签:TX(发送)和 RX(接收)。它们出现在 Arduino UNO 板的两个地方。首先,在数字引脚 0 和 1 处,指示引脚负责串行通信。其次,TX 和 RX LED(13)。发送串行数据时,TX LED 以不同的速度闪烁。闪烁速度取决于板所使用的波特率。RX 在接收过程中闪烁。15数字 I/OArduino UNO 板有 14 个数字 I/O 引脚(15)(其中 6 个提供 PWM(脉宽调制)输出),这些引脚可配置为数字输入引脚,用于读取逻辑值(0 或 1) ;或作为数字输出引脚来驱动不同的模块,如 LED,继电器等。标有“〜”的引脚可用于产生 PWM。16AREF模拟参考,它有时用于设置外部参考电压(0 至 5 伏之间)作为模拟输入引脚的上限。面包板如何将面包板和 Arduino 连接起来使用呢?一般默认红色、黄色和绿色为正极,蓝色和黑色为负极。我们这里选择了一根红色一根蓝色的线来连接 Arduino 和面包板。 熟悉了面包板之后知道上下区域一致(“楚河分界”,选择一边作为工作区域)。电压红蓝线之间与工作插线区域是分开的,这里需要连接线连接一下。 ...

September 8, 2019 · 2 min · jiezi

Arduino-初次见面

最近很幸运认识了一位朋友,听她讲了一些关于少儿编程的内容,出于工作原因与兴趣使然,我开始准备学习一些相关的知识。 Scratch在这之前有过耳闻,后初略看了一下,后续目标是详细看一看,然后构建出自己的一套工具,结合硬件做一些有用的东西。 带小朋友了解了一下 ArduinoJR ,兴趣还是有的,只是怎么用她可以理解的形式给她讲解怎么玩起来,我还一时想不到好的方法,后续期望可以以此为基础做一个类似的自媒体频道来记录这个过程(这只是一个期望,感觉要立 Flag 的话可以立好多)。 Arduino初始在这之前我一直期望购买一套树莓派,然后做一些程序方面的玩具,一直也是没有太明确的想法,也就一直搁置了下来。最近仔细了解了 Scratch 以后搜索得到了 Arduino 这个开源硬件,对于硬件开源我无能为力,但是基于它的周边还是能做很多可以玩起来的东西(我希望这不只是想好,而是可以坚持做下去的一个爱好)。 淘宝入手 Arduino ,主要应该关注的是配件,不清楚具体做什么的情况之下,选择了标配版本,先试着熟悉熟悉,然后基于 Scratch 与 编程语言之间的转换熟悉,渐渐的再考虑后续的可玩性。 开箱收到快递之后,果断打开看了一下书名书,面对满目的零配件,是不是有些想退缩不玩了? Arduino 本身真的很小,比我想象之中小太多了。 IDE 安装说明书上的指引以及驱动盘都是以 Windows 为主, MAC 用户需要官网安装下载软件,直接 Just Download 等待下载。 应用启动以后的编辑器界面长这样的。 运行程序电源连接运行正常 选择一个 Example 上传程序 Example 运行起来的效果是这样的 在线视频 末了仅仅简单开了一个箱,给自己树立一个小小的目标,玩起来。在这个过程中接触一些新的东西,巩固一些自己擅长的知识,以兴趣爱好为出发点做一些可以改变心态的事情。

September 7, 2019 · 1 min · jiezi

Arduino蓝牙小车

Arduino蓝牙小车更新中……

January 23, 2019 · 1 min · jiezi