从阿里云下发字符在ESP32墨水屏上显示
简介:这是一款集成了ESP32开发板的2.13寸墨水屏,内置WiFi与蓝牙功能可实现与阿里云连接远程控制显示,支持IO端口控制其他设备,节省开发成本。这款墨水屏可以黑白形式显示图片(图案和中文)与英文字符,显示清晰,断电后可保持显示最后一屏内容,具有功耗低,视角宽等特点。墨水屏的分辨率为250*122很适合静态图形文字显示,可用于超市价格标签、胸牌、留言板等,连接WiFi后可做成从网络获取时间的日历台、电子时钟、天气预报显示等。ESP32墨水屏开发板
1、注册并登陆阿里云账号
打开谷歌浏览器,输入网址https://iot.aliyun.com,进入阿里云IoT 界面,如下图 所示,点击登陆,在密码登陆栏点击免费注册,进入阿里云账号注册界面(若已有账号可直接登陆),如下图 所示,按要求完成注册即可。
2、实名认证
第一次使用,需进行实名认证,在注册完成后,会弹出实名注册的页面。根据提示操作完成认证即可。
3、开通物联网服务
当我们实名认证成功后,是没有服务的。所以我们需要自己开通物联网服务。 1, 点击首页的菜单键。2, 点击”产品和服务”选项。3, 选择”物联网 IOT”选择。4, 点击”物联网平台”。
选择开通物联网服务,按照提示步骤进行操作,直到提示服务开通成功。
4、登陆物联网平台控制台
物联网平台是阿里云 IoT 的控制台,阿里云上有关物联网的操作,都必须在该平进行,如本教程中提到的产品创建、设备添加、服务创建等,都需要在该控制台上进行。 打开谷歌浏览器,输入网址https://iot.aliyun.com,并登录。登录成功后,点击控制台,如下图所示
进入物联网设备接入页面,点击管理控制台(注:若是第一次进入该页面,应该是立即开通,根据要求开通即可,是免费的),进入物联网平台控制台如下图所示
5、使用物联网平台
创建产品登录并进入物联网平台控制台(可参考上文),在左侧导航栏选择设备管理->产品,单击创建产品,弹出“新建产品”提示框,如下图 所示:
按照页面提示,填写信息,创建一个名为水屏ESP32墨显示的产品,单击保存。产品创建完成后,会自动出现在产品列表中。
接下来为产品定义相应的功能。点击查看产品详情,进入产品详情页
点击功能定义->编辑草稿->添加自定义功能,按下图填写(注:要留意产品标识符),点击确认
功能添加完成后,点击发布上线 直接勾选确认已查看当前版本与线上版本的后点击确定
功能定义里就会出现刚刚创建的功能
创建设备 在左侧导航栏选择设备管理->设备,单击添加设备,选择刚刚创建的产品。选择后,新建的设备将继承该产品定义好的功能和特性。填入 DeviceName。如果不填,系统将自动生成,用以标识设备(用于标识同一产品下的多个设备)。
点击确认然后点击完成,完成设备创建。点击查看设备证书:
你可以查看、复制设备证书信息。设备证书又名设备三元组,由设备ProductKey、DeviceName、和DeviceSecret 组成,是设备与物联网平台进行通信的重要身份认证,建议您妥善保管。ProductKey:物联网平台为您创建的产品颁发的全局唯一标识符。DeviceName:设备在产品内的唯一标识符,用于设备认证和通信。 DeviceSecret:物联网平台为设备颁发的设备秘钥,用于认证加密,需与DeviceName 成对使用。Web可视化开发应用
在左侧导航栏选择loT Studio->项目管理,单击新建项目
单击新建空白项目然后填写名称点击确认,点击确认后会自己跳转到开发页面。
在左侧导航栏选择产品,点击关联物联网平台产品,勾选之前创建的产品,勾选关联产品同时关联其下所有设备,点击确定关联后产品和设备中会出现之前创建的产品与设备在左侧导航栏选择主页,依次点击Web应用、新建。填写应用名称,点击确定在左侧导航栏选择组件,找到文本框并放在编辑页面上调整好大小和位置,将右侧字符数限制改为95选中文本框,点击右侧的交互->新增交互如下图设置点击配置设备,产品选择之前创建的产品,指定设备为之前创建的设备,属性选择之前创建的功能,参数来源选择如下图所示,点击保存
点击发布,之后确定根据自己需要绑定域名,如不绑定直接点击确认回到物联网平台可以在loT Studio->应用开发下看到做好的Wed应用与发布地址,点击发布地址可进入控制页面6、修改代码
在开始修改程序之前你需要看一看ESP32墨水屏的Wiki 安装好开发板的板卡驱动包和使用墨水屏所需要的库文件另外你还需要以下4个库才可以连接阿里云如何安装库文件,点击链接
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"
#define BEDROOD_LIGHT21
/*配置WIFI名和密码*/
const char * WIFI_SSID = "*******";
const char * WIFI_PASSWORD = "*******";
/*配置设备证书信息*/
String ProductKey = "*******";
String ClientId = "12345";/*自定义ID*/
String DeviceName = "*******";
String DeviceSecret = "*******";
/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;
/*需要操作的产品标识符*/
char * Identifier = "*******";
/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "****************************";//****set
const char * pubTopic = "****************************";//******post
DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);
#include <GxEPD.h>
#include "SD.h"
#include "SPI.h"
//由于屏幕有多个版本,如下载程序后出现花屏请将下面3个头文件都测试一遍!
//#include <GxGDE0213B1/GxGDE0213B1.h> // 2.13" b/w
#include <GxGDEH0213B72/GxGDEH0213B72.h>// 2.13" b/w new panel
//#include <GxGDEH0213B73/GxGDEH0213B73.h>// 2.13" b/w newer panel
#include <Fonts/FreeMonoBold12pt7b.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>
#define SPI_MOSI 23
#define SPI_MISO -1
#define SPI_CLK 18
#define ELINK_SS 5
#define ELINK_BUSY 4
#define ELINK_RESET 16
#define ELINK_DC 17
#define SDCARD_SS 13
#define SDCARD_CLK 14
#define SDCARD_MOSI 15
#define SDCARD_MISO 2
#define BUTTON_PIN 39
GxIO_Class io(SPI, /*CS=5*/ ELINK_SS, /*DC=*/ ELINK_DC, /*RST=*/ ELINK_RESET);
GxEPD_Class display(io, /*RST=*/ ELINK_RESET, /*BUSY=*/ ELINK_BUSY);
SPIClass sdSPI(VSPI);
bool sdOK = false;
void connectWiFi(){
Serial.print("Connecting to ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP Adderss: ");
Serial.println(WiFi.localIP());
}
void callback(char * topic, byte * payload, unsigned int len){
Serial.print("Recevice [");
Serial.print(topic);
Serial.print("] ");
char buffer={0};
for (int i = 0; i < len; i++){
buffer=payload;
}
Serial.println(buffer);
char *p= buffer;
int leng= (strstr(p,Identifier) - p)+(strlen(Identifier) + 3);
//Serial.println(buffer);
char LightStatus={0};
for(int i = 0; buffer != '"' ;i++){
LightStatus = buffer;
}
//Serial.println(LightStatus);
display.fillScreen(GxEPD_WHITE);
display.setCursor(0,17);
display.println(LightStatus);
display.update();
}
void ConnectAliyun(){
while(!client.connected()){
Serial.print("Attempting MQTT connection...");
/*根据自动计算的用户名和密码连接到Alinyun的设备,不需要更改*/
if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){
Serial.println("connected");
client.subscribe(subTopic);
}else{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup(){
Serial.begin(115200);
pinMode(BEDROOD_LIGHT,OUTPUT);
/*连接WIFI*/
connectWiFi();
/*初始化Alinyun的配置,可自动计算用户名和密码*/
myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
client.setServer(myAliyun.mqtt_server,PORT);
/*设置回调函数,当收到订阅信息时会执行回调函数*/
client.setCallback(callback);
/*连接到Aliyun*/
ConnectAliyun();
SPI.begin(SPI_CLK, SPI_MISO, SPI_MOSI, ELINK_SS);
display.init(); // enable diagnostic output on Serial
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(0, 0);
sdSPI.begin(SDCARD_CLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_SS);
if(!SD.begin(SDCARD_SS, sdSPI)) {
sdOK = false;
} else {
sdOK = true;
}
display.update();
}
void loop(){
if(!client.connected()){
ConnectAliyun();
}
client.loop();
}
这里分别填写你的WiFi名称和密码ProductKey、DeviceName、DeviceSecret在设备管理->设备,在设备列表中找到我们刚才创建的设备,单击其后的 查看在详细页面点击DeviceSecret后面的查看即可看到ProductKey、DeviceName、DeviceSecret,复制下来填写到代码中对应的位置设备上报和订阅信息,进入产品详情页,点击 Topic列表,即可看到设备的发布和订阅信息,如下图所示:复制到对应的位置(注意:后缀要对应)产品标识符。在左侧导航栏选择产品在产品列表中找到对应的产品,单击 查看选择功能定义即可查看将代码改好后下载到ESP32墨水屏即可通过loT Studio->应用开发下点击发布地址可进入控制页面在控制页面输入字符后点击空白区域即可更新ESP32墨水屏的显示了,最多可以显示95个英文字符
感谢,步骤很详细 wery 发表于 2020-12-1 19:23
感谢,步骤很详细
{:6_204:}感谢评价 哇好详细的教程~!{:6_209:}{:6_209:} 学习了,感觉好高级 尝试了一下,很详细,很高级 本帖最后由 qiebona 于 2021-6-23 18:55 编辑
代码编译这里一直出错是怎么回事?望指教!谢谢!
页:
[1]