tag 标签: esp32

相关帖子
相关博文
  • 热度 2
    2025-4-17 16:27
    336 次阅读|
    2 个评论
    【原创奖励】ESP开发之ubuntu环境搭建
    1. 在Ubuntu官网下载Ubuntu server 20.04版本 https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml # This is the network config written by 'subiquity' network: renderer: networkd ethernets: ens33: #dhcp4: true addresses: - 192.168.4.251/24 nameservers: addresses: routes: - to: default via: 192.168.4.1 version: 2 $ sudo netplan apply $ ip addr show ens33 $ ip route show $ reboot 4. 使用SecureCRT使用SSH远程连接虚拟机的ubuntu 5. 安装各种必要的工具 sudo apt-get install git wget flex bison gperf python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 net-tools 6. 新建esp32目录并进入 $ mkdir esp32 $ cd esp32 7. 拉取gitee工具(原因是从官方下载大概率会失败) $ git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git 8. 执行gitee工具切换镜像脚本 $ cd esp-gitee-tools $ ./jihu-mirror.sh set 9. 拉取esp-idf源码 $ cd .. $ git clone --recursive https://github.com/espressif/esp-idf.git 10. 切换esp-idf版本分支到v5.3 $ cd esp-idf $ git checkout v5.3 $ git submodule update --init --recursive 如果提示失败或有错误试下这句:../esp-gitee-tools/submodule-update.sh 11. 更换pip源 $ pip config set global.index-url http://mirrors.aliyun.com/pypi/simple $ pip config set global.trusted-host mirrors.aliyun.com 12. 安装编译工具 $ ../esp-gitee-tools/install.sh 13. 设置环境变量并将环境变量放到.bashrc中(这样下次启动后上一步设置的环境变量会重新加载) $ source export.sh $ echo "source ~/esp32/esp-idf/export.sh" ~/.bashrc 14. 设置USB串口权限(解决下载代码时报USB串口权限问题) $ sudo usermod -aG dialout usrname usrname需要换成你的用户名 15. 重启 16. windows安装VSCODE,并安装如下插件 17. 通过以上插件远程连接ubuntu 这样就可以建立远程连接了,代码就可以在vscode进行查看和更改,但是我们会发现每次都需要输入密码,我们通过如下方式解决 解决使用VsCode远程ssh连接虚拟机ubuntu需要重复输入密码 18. VSCode中为远程主机安装插件 19. 按照上图依次安装如下插件 20. 进行插件配置 c/c++插件 改ESP-IDF配置 键盘同时按下ctl+shift+p,在弹出的对话框输入如下,这样我们就可以任意查看和跳转代码位置了。 21. 建立第一个工程 使用vscode远程连接虚拟机,在终端窗口进行操作 创建存放工程的目录并进入目录 mkdir esp32-prj cd esp32-prj 使用命令创建工程 idf.py create-project helloworld 进入目录更改目标芯片,一般默认为esp32 idf.py set-target esp32-s3 进行第一次编译 idf.py build 打开工程 如图操作,这样才可以方便的跳转和查看代码,每个新的工程都需要执行一次 编译代码 烧录,先连接开发板,并保证开发板是连接到了虚拟机 idf.py flash 监视开发板执行情况 idf.py monitor 退出监控使用CTL+]组合键 烧录指令可以和监控指令可以放在一起执行 idf.py flash monitor
  • 热度 4
    2025-1-25 22:09
    3341 次阅读|
    0 个评论
    【电子DIY】智能天气监控站
    项目展示 ①正面、反面 ②左侧、右侧 项目源码 : https://mbb.eet-china.com/download/316656.html 前言 为什么想到要做这个小玩意呢,作为一个死宅,懒得看手机,但又想要抬头就能看见时间和天气信息,于是就做个这么个小东西,放在示波器上面正好(示波器外壳有个小槽,刚好可以卡住) 功能主要有,获取国家气象局的天气信息,还有实时的温湿度,主控采用ESP32,所以后续还可以开放更多奇奇怪怪的功能,比如油价信息、股票信息之类的,反正能联网可操作性就大多了 原理图、PCB、面板设计均使用嘉立创EDA,项目代码方面采用Arduino IDE,项目全开源,商用请联系 设计思路 硬件信息 ①主控:ESP32(esp32 wroom 32) ②屏幕:主屏1.8寸TFT_LED,副屏0.96寸OLED ③充电:IP5306 ④降压:AMS1117-3.3 ⑤通信:CH340K ⑥接口:TYPE-C-16P ⑦传感:DHT11 ⑧电池:2000毫安锂电 原理图 PCB 面板设计 我还是第一次用到嘉立创的面板设计,这里就给大家提供一个参考,大家感兴趣也可以试一下 我设计的尺寸大概是45*60mm,最少5张起,一张5块钱,不包邮(无法使用包邮卷,8元运费) 新人领了一张10元优惠券,所以最终是23块钱 不知道这个价格怎么样? 要补充一点,嘉立创面板的服务还是很到位的,可能他们怕你不会弄,会有专员加你确认生产稿,这点还是非常好评的 我第一次画就画错了,在确认生产稿环节,才将图纸改正确,不然血亏23块钱 我采用的方法是,拼了几张图片,中间不设图案,透明显示(屏幕显示) 不知道正确的方法是不是这样,反正效果也还可以 目前功能 ①温度、湿度检测 ②户外天气获取 ③自动配网 ④主屏、副屏显示 ⑤智能充放电 ⑥天气图片适配 ⑦天气文字适配 ⑧OLED支持常用中文库 ⑨NTP网络时钟 温湿度检测 使用DHT11传感器,库文件dht11库,库文件地址https://wwmg.lanzouu.com/id6GV2fydzpa 非常常用的库,使用方法也很简单,DHT11.read更新传感器信息,然后直接用DHT.humidi和DHT11.temperature读取温湿度信息 户外天气获取 通过获取天气API,然后使用JSON库解析API信息 天气API地址:http://api.xemowo.top/api/tqyb.html 调用ParseWeather函数(连接网络后),访问API,并且解析JSON信息,将数据保存至变量 自动配网 在setup函数中,就调用connectToWiFi函数,带入数据为超时时长,在15s内读取内存保存的网络数据,并且进行连接,连接失败或超时,则进行配网 进入配网状态,手机、电脑在wifi列表可见XEM_ESP32,进行连接,连接成功会自动跳转到配网界面 输入WIFI账号密码后,会将数据保存进内存,方便下次启动连接WIFI NTP时钟 采用NTPClient库,使用阿里云NTP授时 库函数:https://github.com/arduino-libraries/NTPClient 天气图片适配 工程文件夹中,BMP.H文件保存大部分常用天气的图标,以及一些用得到的图标,代码会根据当前天气,自动适配图片 天气文字适配 XEM_FONT.H文件中,则保存所需天气的中文字符 参考库大全 WiFi.h 内置 ArduinoJson.h https://github.com/bblanchon/ArduinoJson HTTPClient.h 内置 Arduino.h 内置 TFT_eSPI.h https://github.com/Bodmer/TFT_eSPI SPI.h 内置 string.h 内置(C/C++ 标准库) NTPClient.h https://github.com/arduino-libraries/NTPClient WiFiUdp.h 内置 U8g2lib.h https://github.com/olikraus/u8g2 Wire.h 内置 dht11.h https://github.com/adafruit/DHT-sensor-library 复刻成本 批发会更便宜,以下价格为单买 (一)元器件 1.8寸TFT_LEC:11元 0.96寸OLED:8元 ESP32:13元 DHT11:4元 CH340K:3元 IP5306:2元 AMS1117:1元 2000锂电池:3元 其他元器件:5元 (二)其他 PCB:白嫖 面板:23元 螺丝:2元 汇总:75元 总结 项目初代可能功能比较单一,但是ESP32的能力还远不止这么点,后续还可以更新APP,以及其他接口功能 后续可能考虑用3D打印替换面板,因为面板还是比较贵,而且不是封闭的 元器件可以批发买,外壳采用3D打印,成本可能可以降到50内 后代可能会考虑去掉OLED屏幕,以及将DHT11换成更小的传感芯片,可以将体积缩小一半,这样更加的迷你和轻便 大家有什么意见可以讨论一下,复刻有问题的,可以联系我
  • 热度 4
    2024-10-28 08:20
    1832 次阅读|
    0 个评论
    前言 (一)在当今这个瞬息万变的数字化时代,导航技术已经深入到我们生活的方方面面,从日常出行到物流配送,再到应急救援,无不彰显其重要性。 随着智能手机和物联网技术的飞速发展,对于导航系统的需求不再仅仅局限于简单的路线指引,而是更加追求精准性、实时性和智能化。在此背景下,将高德导航的路径规划算法高效应用于单片机系统及移动APP中,不仅是对传统导航技术的一次革新,更是推动智慧城市、智能交通系统建设的关键一环。 (二)单片机,作为嵌入式系统的核心,凭借其体积小、功耗低、集成度高等特点,在车载设备、智能家居、工业自动化等领域发挥着不可替代的作用。 将高德导航的路径规划功能集成到单片机上,意味着可以实现更为紧凑、低功耗的导航解决方案,为车辆自主导航、无人机路径规划等应用场景提供强有力的技术支持。这不仅要求算法在保持高精度的同时,还需进行深度优化以适应单片机有限的计算资源和存储能力。 (三)所以本文将给大家分享一下,我将高德开放平台的导航、路径规划功能运用到单片机及APP上,从而可以快速开发导航类、规划类的项目。当然方法有非常多种,我本次分享的仅仅是高德的冰山一角,高德提供的API,甚至可以让单片机不需要APP支持,独立运行导航、路径规划等项目 本文末尾,有项目所有代码的下载地址 效果展示 (一)APP展示 由于是快速开发,所以没有任何美化,仅是实现功能。APP开发平台:App Inventor 图:设定目的地后,会自动规划最近的路线,然后实时定位导航 (二)单片机展示 单片机:ESP32 图:APP开始导航后,将导航信息发送到ESP32 项目大纲 APP设定目的地→→地理编码API→→APP定位经纬度→→坐标转换API→→路径规划API→→APP显示静态图→→提交单片机显示 为了不泄露信息,最好对高德API进行封装,然后通过自己的API来操作。同时APP和单片机的通信也用到API。http://api.xemowo.top (一)获取高德开放平台API ①路径规划API:https://lbs.amap.com/api/webservice/guide/api/direction 对步行、公交路径规划,返回从原地到目的地的信息(方向,距离,时间,步行指示等) ②地理编码API:https://lbs.amap.com/api/webservice/guide/api/georegeo 将地址信息,转化为经纬度等信息。如:中山市港口镇政府,返回信息:"location" :"113.384324,22.584733" ③坐标转换API:https://lbs.amap.com/api/webservice/guide/api/convert 将用户输入的非高德坐标(GPS坐标、mapbar坐标、baidu坐标)转换成高德坐标。 ④静态地图:https://lbs.amap.com/api/webservice/guide/api/staticmaps 项目可以不用静态地图,因为路径规划API也会返回带有标记的静态图 (二)封装API(因人而异,后面我会放出PHP源码) ①地址查询经纬度:http://api.xemowo.top/api/gaode/chaxun.php 文档:http://api.xemowo.top/api/chaxun.html ②坐标转换:http://api.xemowo.top/api/gaode/gps.php 文档:http://api.xemowo.top/api/GPS.html ③路径规划:http://api.xemowo.top/api/gaode/walk.php 文档:http://api.xemowo.top/api/walk.html ④单片机接收信息:http://api.xemowo.top/api/gaode/esp_walk.php 文档:http://api.xemowo.top/api/esp_walk.html (三)制作APP App Inventor,Android编程工具https://www.17coding.net/ 采用图形化积木式的拖放组件,完全在线开发的Android编程环境,无需复杂的软件安装,可以通过浏览器直接访问并进行编程。 (四)单片机编程 Arduino IDE,内置很多库函数,对编程极其方便,速成项目,并且资料很多,对初学者帮助非常大 高德API (一)注册高德开放平台的账号https://lbs.amap.com/ (二)应用管理----创建新应用 (三)添加key,选择web服务(请勿泄露key) (四)寻找所需的API,本期项目我们需要4个高德API 注意个人用户调用的限量,企业用户会多一些,超过限量可能被禁止使用 ①路径规划API:https://lbs.amap.com/api/webservice/guide/api/direction 对步行、公交路径规划,返回从原地到目的地的信息(方向,距离,时间,步行指示等) ②地理编码API:https://lbs.amap.com/api/webservice/guide/api/georegeo 将地址信息,转化为经纬度等信息。如:中山市港口镇政府,返回信息:"location" :"113.384324,22.584733" ③坐标转换API:https://lbs.amap.com/api/webservice/guide/api/convert 将用户输入的非高德坐标(GPS坐标、mapbar坐标、baidu坐标)转换成高德坐标。 ④静态地图:https://lbs.amap.com/api/webservice/guide/api/staticmaps 项目可以不用静态地图,因为路径规划API也会返回带有标记的静态图 制作API 搭建API(网站)需要一台服务器,并且需要开发环境 我这里的环境如下: 系统:Orange Pi 1.0.2 Jammy (aarch64) WEB平台:OpenResty PHP:PHP-72 域名:API.XEMOWO.TOP (一)坐标转换API (http://api.xemowo.top/api/GPS.html) 示例:http://api.xemowo.top/api/gaode/gps.php?gps=113.38472,22.59476&photo=0
  • 热度 13
    2022-7-26 09:15
    2387 次阅读|
    0 个评论
    Wi-Fi+BLE双模是智能设备的首选连接模式,能大幅度解决2.4G&5G环境下的配网问题,兼容性更高,速度更快,可在不增加成本的前提下大幅提高产品性能和体验。例如,采用ESP32的2.4GHz“Wi-Fi + 蓝牙”单芯片方案,具有精细的时钟门控、省电模式和动态电压调整,典型应用场景包括:IoT传感器Hub、IoT数据记录器、智能照明、智能门锁、照明控制、工业机器人、网络广播、健康监测、服务机器人等。 方案特点 作为高度集成的“Wi-Fi+ 蓝牙”解决方案,ESP32集成了天线开关、射频Balun、功率放大器、低噪声放大器、滤波器以及电源管理模块,外部元器件只需大约20个,极大减少了印刷电路板(PCB)的面积。 ESP32-DevKitM-1开发板 WiFi方面,ESP32支持802.11 b/g/n, 802.11 n(2.4 GHz)速度高达150Mbps。 蓝牙方面,ESP32包含蓝牙v4.2完整标准,包含传统蓝牙(BR/EDR) 和低功耗蓝牙(BLE),支持标准Class-1、Class-2和Class-3,且无需外部功率放大器,输出功率高达+9dBm。 ESP32-DevKitM-1开发板电路图 在低功耗IoT传感器Hub应用场景中,ESP32只有在特定条件下才会被周期性地唤醒。低占空比可以极大降低ESP32芯片的能耗。射频功率放大器的输出功率也可调节,以实现通信距离、数据率和功耗之间的最佳平衡。 芯齐齐BOM分析 芯齐齐BOM分析工具显示,ESP32-DevKitM-1集成了ESP32-MINI-1U芯片,设有重置按钮和固件下载模式激活按钮,USB转串口编程接口同时可用作开发板的供电电源或PC和ESP32芯片的通信接口,单芯片USB至UART桥接器可提供高达3Mbps的传输速率。 ESP32-DevKitM-1开发板BOM BOM表中U1为40MHz石英晶体谐振器,频差±10ppm,负载电容15pF。因此,对应的匹配电容C1、C2应选择17pF左右NP0介质MLCC,PCB布线要接近xal_N和xal_P引脚。另外,PCB应选择RF性能良好的无卤板子,尺寸为13.2x13.5x0.8mm。
  • 热度 19
    2022-4-26 17:30
    3512 次阅读|
    0 个评论
    用ESP32和RTC做一个“唤醒闹钟”吧! 最初于2019年12月3日发布 这篇文章来源于DevicePlus.com英语网站的翻译稿。 本文最初发布在deviceplus.jp网站上,而后被翻译成英语。 目录 前言 关于ESP32闹钟 创建日期和时间的“RTC” 在ESP32 LCD上显示日期和时间 使用MP3模块发出闹铃响声 给闹钟主机接线 给ESP32闹钟分机接线 安装库和字体文件 Arduino IDE闹钟程序 分机程序 确认运行情况 结论 相关文章 前言 您每天早上被什么闹钟吵醒?早上人们的一个常见问题是关掉闹钟并直接回去睡觉。 这一次,我们决定使用ESP32制作一个“唤醒闹钟”,应该有助于解决这个问题。 设计步骤 预计完成时间:120分钟 名称 卖方 价格 ESP32-DevKitC(2 件) 贸泽电子 约10.00美元 DS3231 模块 亚马逊 约3.00美元 LIR2032(纽扣充电电池) 亚马逊 约3.60美元 扬声器 亚马逊 约1.00~3.00美元 2.8英寸SPI连接器 320×240像素LCD屏幕 亚马逊 约15.00美元 *除上述物品外,还需要一个轻触开关、一个LED和一个约100Ω的电阻器。 关于ESP32闹钟 我们来使用ESP32完成一个目标吧:像普通闹钟一样在屏幕上显示日期和时间,并在指定的时间响起。在设计制作这款“唤醒闹钟”时,我们需要将分机按钮(用于关闭闹钟)与闹钟主机分开放置。之所以这样设计,是因为想要您必须起床并走到分机按钮处才能将闹钟关掉。 如下面的视频所示,使用两个ESP,一个用于主机,另一个用于分机。在视频中,主机和分机是挨着的,但如果通过Wi-Fi连接,它们是可以在Wi-Fi范围内分开放置的。 将主机和分机分开放置时,请使用ESP32的Wi-Fi功能。两个ESP32作为Web服务器和客户端运行,并相互通信,如图1所示。 图 1 主机和分机之间的通信 创建日期和时间的“RTC” 对于Arduino等微控制器来说,通常能够获取在启动程序后经过的时间。但是,您获得的时间通常不是很准确,因为断电时会重置经过时间。 而如果使用ESP32,则可以通过Wi-Fi连接到互联网,以定期从互联网上的NTP服务器获取日期和时间,并将其设置到ESP32上。但Arduino Uno等部分微控制器没有互联网连接功能,因此,拥有一种可以更轻松地处理日期和时间的机制会很方便。 这就是为什么经常使用一种被称作“RTC”(实时时钟)的IC。 RTC是基于周期性发出信号的元件来计时的IC。此外,通过将其连接到电池等外部电源,即使在微控制器断电时也可以继续计时。 许多产品都采用RTC,此次,我们将使用一种名为“DS3231”的RTC模块。 在电子设计所用的RTC模块当中,DS3231模块很受欢迎,且很容易获得。由于接口是I2C,因此只需要4根线。除了RTC功能,还具有温度传感器功能(不过本文不会用到温度传感器)。 此外,在照片1所示的DS3231上,安装一个名为“LIR2032”的纽扣电池,这样即使在微控制器关闭的情况下也能继续记录日期和时间。LIR2032的电池尺寸与CR2032的相同,但不同的是它可充电。 照片1 DS3231模块 在ESP32 LCD上显示日期和时间 由于闹钟用于查看当前日期和时间,因此需要以易于理解的方式显示日期和时间。以下设备用于显示日期和时间。 7段LED LED 矩阵 OLED 显示器 字符液晶显示器 图形液晶显示器 根据设备的不同,有不同的库和不同的编程方法。这还取决于它是否适合您想要制作的作品。例如,7段LED仅适合以低成本显示数字,但不适合显示详情。其中,图形液晶显示器是最通用的,可以用于许多不同的项目,所以我这次决定使用它。 市面上有各种类型的液晶显示器模块,但对于今天的项目,我们将使用一个名为“ILI9341”的控制器,并使用SPI接口(照片2)。此外,液晶显示器通常以2.2英寸/2.4英寸/2.8英寸尺寸出售,因此,请根据您正在做的作品类型进行相应调整。 照片2 控制器用ILI9341 2.8英寸液晶显示器 使用MP3模块发出闹钟铃声 既然是闹钟,在指定时间发出铃声是必需的。您可以将蜂鸣器连接到ESP32以产生单一铃声,但如果您愿意,也可以使用自己喜欢的铃声。为此,我们将使用一个名为“DFPlayer Mini”的模块,它可以播放任何MP3数据(照片3)。 DFPlayer Mini是一个可以通过串口发送命令来播放microSD卡中MP3的模块。可以将一个小型扬声器连接到扬声器输出引脚以产生铃声。 照片3 DFPlayer Mini 给闹钟主机接线 让我们进入实际构建吧。首先,给闹钟接线。 使用两个面包板,一个配有ESP32和DS3231,另一个配有液晶显示器(LCD)和DFPlayer Mini。各部件接线如图2所示。 由于ESP32很宽,您只能在普通面包板的一面放一根跳线。因此,请改用电源线只在一侧、多一排插孔的面包板(例如Sanhayato的SAD-101)。 ESP32和液晶显示器通过SPI进行连接。ESP32可以使用两个 SPI(VSPI和HSPI),但使用的是VSPI(引脚18/19/23)(表1)。 ESP32和DS3231通过I2C进行连接。在ESP32中,I2C可以分配给任何引脚,但我们使用标准引脚(SDA=21和SCL=22)(表 2)。 DFPlayer Mini 进行串行连接。ESP32可以使用3个串口,但为此请同时使用引脚16和引脚17(表3)。此外,将扬声器连接到DFPlayer Mini“SPK1”和“SPK2”两个引脚。 图2 闹钟主机接线 ESP32 引脚 液晶显示器引脚 5V VCC GND GND 5 CS 4 RESET 2 DC 23 MOSI 18 SCK 19 MISO 表 1:ESP32 与液晶显示器的连接 ESP32 引脚 DS3231 引脚 5V VCC GND GND 21 SDA 22 SCL 表 2:ESP32与DS3231的连接 ESP32 引脚 DFPlayer Mini 引脚 5V VCC GND GND 16 TX 17 RX 表 3:ESP32与DFPlayer Mini的连接 给ESP32闹钟分机接线 接下来,我们将给分机接线。分机接线应按图3所示进行。您所要做的就是将开关和 LED连接到ESP32。将开关的一侧连接到ESP32的3V3引脚,另一侧连接到引脚4。通过电阻器→LED再通过ESP32的引脚13连接到GND。 在读取开关状态的电路上插入一个上拉电阻或下拉电阻。但是,由于ESP32可以通过内部电阻进行上拉/下拉,因此省略了外部电阻。 图3 分机接线 安装库和字体文件 完成接线工作后,您可以创建程序。首先,从安装下面的各个库开始。 Adafruit GFX Adafruit ILI9341 RTCLib DFRobotDFPlayerMini 安装步骤如下: 启动Arduino IDE。 “Manage Library”菜单,以打开Library Manager。 在“Filter search”字段中输入“Adafruit GFX”。 Adafruit GFX将在库列表中显示。单击“Install”按钮(图 4)。 以相同的方式安装每个库。 有几个名称相似的RTCLib和DFPlayer库。RTCLib 安装“RTCLib by Adafruit”,而DFPlayer安装“DFRobotDFPlayerMini by DFRobot”。 图 4 Adafruit GFX库安装 此外,为通过大字符显示时间,需要安装字体文件。如果您下载并解压缩以下zip文件,将可以获得一个名为“FreeSans40pt7b.h”的文件。 “Fonts”文件夹,将字体文件复制到那里。 https://www.h-fj.com/deviceplus/font.zip Arduino IDE闹钟程序 接下来,在Arduino IDE中创建一个闹钟程序并将其写入ESP32。程序内容如清单1所示。 清单1:闹钟主机程序 程序内容(放在这里) 但是,第17行到第21行需要改写如下: ・第17/18行 根据您的Wi-Fi路由器的SSID/密码重写。 ・第19行 指定要分配给ESS32的IP地址。根据您的Wi-Fi路由器的网络配置自行决定IP地址。 在普通IP地址中,四组数字用句点分隔,但在这一行中,它是函数参数的形式,所以四组数字用逗号分隔。 ・第20行 指定网络默认网关的IP地址。通常,它是Wi-Fi路由器的IP地址。用逗号分隔IP地址中的四组数字。 ・第21行 根据分配给分机ESP32的IP地址重写。 例如,如果您想按照表4所示进行设置,请重写第17行至第21行,如清单2所示。 项目 设定值 Wi-Fi路由器SSID my_wifi Wi-Fi路由器密码 my_password 分配给主机ESP32的IP地址 192.168.1.101 默认网关IP地址 192.168.1.1 分配给分机ESP32的IP地址 192.168.1.102 表4:主机网络设置示例 清单 2:重写第17-21行的示例 分机程序 分机程序如清单3所示。 以与闹钟主机相同的方式重写第5行到第9行。 但是,在第7行,指定分配给分机的IP地址。 此外,在第9行的“Main console IP address(主控台IP地址)”中指定闹钟的IP地址。 清单 3:分机程序 程序内容 #include #include #include #include #include #include #include #include #include "time.h" #include #include #include #include #include // Initial setup const char *ssid = "Wi-Fi SSID"; const char *pass = "Wi-Fi password"; IPAddress ip(IP address assigned to main unit); IPAddress gateway(IP address of default gateway); const char* notify_url = "http://IP address of extension unit/alarm"; const char* adjust_time = "04:00:00"; #define DF_VOLUME 30 // Constants, etc. #define ALARM_SIG 25 #define TFT_DC 2 #define TFT_CS 5 #define TFT_RST 4 #define TFT_WIDTH 320 Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST); RTC_DS3231 rtc; HardwareSerial hs(1); DFRobotDFPlayerMini myDFPlayer; WebServer server(80); char old_date ; char old_time ; char old_alarm ; char alarm_time ; char wdays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; bool alarm_checked = false; bool alarm_on = false; bool ntp_adjusted = false; int alarm_ctr; // Set date and time using NTP void setTimeByNTP() { struct tm t; configTime(9 * 3600L, 0, "ntp.nict.jp", "time.google.com", "ntp.jst.mfeed.ad.jp"); if (!getLocalTime(&t)) { Serial.println("getLocalTime Error"); return; } rtc.adjust(DateTime(t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec)); } // Display string on LCD void showMessage(char* s_new, char* s_old, int y0, int height) { int16_t x1, y1; uint16_t w, w2, h; int x, y; if (strcmp(s_new, s_old) != 0) { tft.getTextBounds(s_old, 0, 0, &x1, &y1, &w, &h); w2 = w * 11 / 10; tft.fillRect((TFT_WIDTH - w2) / 2 , y0 - (height / 2) + 1, w2, height, ILI9341_BLACK), tft.getTextBounds(s_new, 0, 0, &x1, &y1, &w, &h); tft.setCursor((TFT_WIDTH - w) / 2, y0 + (h / 2) - 1); tft.print(s_new); strcpy(s_old, s_new); } } // Main settings page void handleRoot() { int i; String html = " \n" " \n" " \n" " \n" " Alarm clock settings \n" " \n" " \n" " \n" " \n" " \n"; for (i = 0; i < 24; i++) { html += "
相关资源