当前位置:网站首页>ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程
ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程
2022-07-25 09:44:00 【perseverance52】
ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程
ESP RainMaker
ESP RainMaker 是乐鑫推出的一个端到端平台。基于该平台,用户无需管理基础设施,可直接使用乐鑫的 ESP32-S2 SoC 快速实现物联网创意与想法。
- 乐鑫官方对ESP RainMaker介绍:https://www.espressif.com.cn/zh-hans/news/ESP-RainMaker
目前通过示例,将程序烧录到ESP32C3上,只实现了通过蓝牙连接到设备,在入网过程中,总是出错,代码上可能还需要完善才行。
esp-rainmaker-基于android版的APP应用下载地址

这个基于安卓的手机端APP,在各大APP应用市场真不好找,还要好通过官网提供的github找到了。
Release v2.3.0
- https://github.com/espressif/esp-rainmaker-android/releases

- 其他版本:https://github.com/espressif/esp-rainmaker/wiki
示例代码
//This example demonstrates the ESP RainMaker with a standard Switch device.
#include "RMaker.h"
#include "WiFi.h"
#include "WiFiProv.h"
#define DEFAULT_POWER_MODE true
const char *service_name = "PROV_1234";
const char *pop = "abcd1234";
//GPIO for push button
#if CONFIG_IDF_TARGET_ESP32C3
static int gpio_0 = 9;
static int gpio_switch = 7;
#else
//GPIO for virtual device
static int gpio_0 = 0;
static int gpio_switch = 16;
#endif
/* Variable for reading pin status*/
bool switch_state = true;
//The framework provides some standard device types like switch, lightbulb, fan, temperaturesensor.
static Switch my_switch("Switch", &gpio_switch);
void sysProvEvent(arduino_event_t *sys_event)
{
switch (sys_event->event_id) {
case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32S2
Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);
printQR(service_name, pop, "softap");
#else
Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);
printQR(service_name, pop, "ble");
#endif
break;
default:;
}
}
void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx)
{
const char *device_name = device->getDeviceName();
const char *param_name = param->getParamName();
if(strcmp(param_name, "Power") == 0) {
Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
switch_state = val.val.b;
(switch_state == false) ? digitalWrite(gpio_switch, LOW) : digitalWrite(gpio_switch, HIGH);
param->updateAndReport(val);
}
}
void setup()
{
Serial.begin(115200);
pinMode(gpio_0, INPUT);
pinMode(gpio_switch, OUTPUT);
digitalWrite(gpio_switch, DEFAULT_POWER_MODE);
Node my_node;
my_node = RMaker.initNode("ESP RainMaker Node");
//Standard switch device
my_switch.addCb(write_callback);
//Add switch device to the node
my_node.addDevice(my_switch);
//This is optional
RMaker.enableOTA(OTA_USING_PARAMS);
//If you want to enable scheduling, set time zone for your region using setTimeZone().
//The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
// RMaker.setTimeZone("Asia/Shanghai");
// Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
RMaker.enableTZService();
RMaker.enableSchedule();
RMaker.start();
WiFi.onEvent(sysProvEvent);
#if CONFIG_IDF_TARGET_ESP32S2
WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
#else
WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
#endif
}
void loop()
{
if(digitalRead(gpio_0) == LOW) {
//Push button pressed
// Key debounce handling
delay(100);
int startTime = millis();
while(digitalRead(gpio_0) == LOW) delay(50);
int endTime = millis();
if ((endTime - startTime) > 10000) {
// If key pressed for more than 10secs, reset all
Serial.printf("Reset to factory.\n");
RMakerFactoryReset(2);
} else if ((endTime - startTime) > 3000) {
Serial.printf("Reset Wi-Fi.\n");
// If key pressed for more than 3secs, but less than 10, reset Wi-Fi
RMakerWiFiReset(2);
} else {
// Toggle device state
switch_state = !switch_state;
Serial.printf("Toggle State to %s.\n", switch_state ? "true" : "false");
my_switch.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state);
(switch_state == false) ? digitalWrite(gpio_switch, LOW) : digitalWrite(gpio_switch, HIGH);
}
}
delay(100);
}
- 串口打印信息

ESP32 RainMaker手机端连接过程
- 在手机上打开
ESP32 RainMaker APP应用程序,选择Add Device
- 通过扫描或者手动扫描连接到设备。(通过扫描很难成功识别串口监视器中的二维码)

- 程序烧录到目标板上后,打开串口监视器,会打印出下面这个带二维码的信息,如果没有看到请重启设备。

- 没有通过二维码识别的,可以通过下方的按钮手工连接到设备。


- 选择蓝牙
BLE,手机一定要开启蓝牙功能,有些手机还必须开启定位功能,否则无法找到蓝牙设备。
- 可以搜索到一个带
PROV的蓝牙设备
- 点击并连接这个设备,会要求输入PIN码才能进行连接。(默认是
bcd1234,可以通过串口信息看到相关信息)

- 第二步就是连接WiFi,接入互联网。(这里你默认匹配的是手机连接的哪个WiFi信号,)

- 不过到了这一步,不知道为什么会显示发送失败的信息

所以到这里就没有接入互联网实现手机端控制按钮开发功能。
边栏推荐
- 搭建LNMP+DISCUZ论坛
- 2021 written examination summary of niuke.com 01
- Number theory -- negative Radix conversion
- UE4 loadingscreen dynamic loading startup animation
- Storage, computing and distributed computing (collection and sorting is suitable for Xiaobai)
- Mysql5.7 master-slave database deployment (offline deployment)
- 4. FTP service configuration and principle
- 2021 牛客网笔试总结 01
- Voxceleb1 dataset Download
- Deadlock event of thread pool
猜你喜欢

Pytorch tensor list is converted to tensor list of tensor to tensor using torch.stack()

disabled和readonly 以及焦点问题

Supervisor部署(离线部署需要提前下载部署包)

js 哈希表 02

DHCP configuration (take Huawei ENSP as an example)

2. Conditional statements of shell script

Vscode latex workshop set xelatex compilation

Idea overall font size modification

云原生IDE:iVX免费的首个通用无代码开发平台

JS encryption parameter positioning
随机推荐
如何通过开源数据库管理工具 DBeaver 连接 TDengine
Attention is all you need paper intensive reading notes transformer
我为OpenHarmony 写代码,战“码”先锋第二期正式开启!
Angr (IV) -- angr_ ctf
Angr(四)——angr_ctf
What is the meaning of ordinary people's life?
After switching the shell command line terminal (bash/zsh), CONDA cannot be used: command not found
User preferences
Number theory -- Research on divisor
4. Children next door will know all kinds of shell symbols {}[], etc
Angr (IX) -- angr_ ctf
Principle of struct2
ONNX Runtime介绍
Test plan and test plan
3.信你能理解的!shell脚本之循环语句与函数,数组,冒泡排序
Pytoch separates tensor by the value of one dimension of tensor (simple)
4.FTP服务配置与原理
搭建LNMP+DISCUZ论坛
Angr(三)——angr_ctf
Erlang(离线部署)