- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Adafruit_MQTT 库很棒,但我遇到了问题。我在 Arduino 中将它与 NodeMCU (ESP8266) 一起使用。示例代码一切正常。 (TLS 连接 - WiFiClientSecure)。用我的方式当我将 topic direct value: "sometopic/abc/adbc" 输入参数时,一切都还可以。 (硬编码)
//Connect successfuly when i use:
GLB_MQTTClient = temMQTT;
Adafruit_MQTT_Publish *temPub = new Adafruit_MQTT_Publish(GLB_MQTTClient, "pubTopic", MQTT_QOS_1);
Adafruit_MQTT_Subscribe *temSub = new Adafruit_MQTT_Subscribe(GLB_MQTTClient, "sometopic/abc/adbc", MQTT_QOS_1);
但是我的程序必须检查一些配置才能从 EEPROM 获取 MQTT 主题,因此它无法在文件头初始化变量时分配 TOPIC。
所以我创建了新指针来初始化 MQTT 变量的值。然后图书馆无法连接到服务器。
#include <Arduino.h>
#include <PubSubClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Ticker.h>
#include <common.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
//Do something for wifi connection...
WiFiClientSecure GLB_secureClient;
//Init with default value, cuz the library does not have default constructor
Adafruit_MQTT_Client *GLB_MQTTClient = new Adafruit_MQTT_Client(NULL, NULL, NULL, NULL, NULL, NULL);
Adafruit_MQTT_Publish *GLB_MQTT_Publish = new Adafruit_MQTT_Publish(NULL, NULL, MQTT_QOS_1);
Adafruit_MQTT_Subscribe *GLB_MQTT_Subcribe = new Adafruit_MQTT_Subscribe(NULL,NULL,MQTT_QOS_1);
void initNormalConnection()
{
printf("\n\nAddress of GLB_secureClient: %p\n", &GLB_secureClient);
printf("Address of GLB_MQTTClient: %p\n", GLB_MQTTClient);
printf("Address of GLB_MQTT_Publish: %p\n", GLB_MQTT_Publish);
printf("Address of GLB_MQTT_Subcribe: %p\n", GLB_MQTT_Subcribe);
GLB_secureClient = WiFiClientSecure();
GLB_secureClient.setFingerprint(FINGER_PRINT);
Adafruit_MQTT_Client *temMQTT = new Adafruit_MQTT_Client(&GLB_secureClient, BROKER_HOST, BROKER_PORT);
GLB_MQTTClient = temMQTT;
Adafruit_MQTT_Publish *temPub = new Adafruit_MQTT_Publish(GLB_MQTTClient, pubTopic, MQTT_QOS_1);
Adafruit_MQTT_Subscribe *temSub = new Adafruit_MQTT_Subscribe(GLB_MQTTClient, subTopic, MQTT_QOS_1);
GLB_MQTT_Publish = temPub;
GLB_MQTT_Subcribe = temSub;
GLB_MQTT_Subcribe->setCallback(MQTTCtrCallback);
GLB_MQTTClient->subscribe(GLB_MQTT_Subcribe);
printf("\n\nAddress of GLB_secureClient: %p\n", &GLB_secureClient);
printf("Address of GLB_MQTTClient: %p\n", GLB_MQTTClient);
printf("Address of GLB_MQTT_Publish: %p\n", GLB_MQTT_Publish);
printf("Address of GLB_MQTT_Subcribe: %p\n", GLB_MQTT_Subcribe);
PRINTLN("\ninitNormalConnection");
}
void MQTTConnect()
{
int8_t ret;
// Stop if already connected.
PRINTLN("MQTTConnect");
if (GLB_MQTTClient->connected())
{
PRINTLN("connected");
return;
}
PRINTLN("not connected");
if (stateSmartConfig || WiFi.status() != WL_CONNECTED)
{
return;
}
PRINTLN("Connecting to MQTT... ");
uint8_t retries = 3;
ret = GLB_MQTTClient->connect();
PRINT("Connect MQTT result: ");
PRINTLN(ret);
while (ret != 0)
{ // connect will return 0 for connected
ERR_PRINTLN(GLB_MQTTClient->connectErrorString(ret));
DEBUG_PRINTLN("Retrying MQTT connection in 10 seconds...");
GLB_MQTTClient->disconnect();
delay(10000);
retries--;
if (retries == 0)
{
// basically die and wait for WDT to reset me
return;
}
}
Serial.println("MQTT Connected!");
}
void setup(){
//Do something and check config
initNormalConnection();
}
void loop()
{
//do somethings
MQTTConnect();
GLB_MQTTClient->processPackets(10000);
if (!GLB_MQTTClient->ping())
{
GLB_MQTTClient->disconnect();
}
}
ret = GLB_MQTTClient->connect() 总是失败 ret = -1(连接失败)地址输出:
Address of GLB_secureClient: 0x3ffef170
Address of GLB_MQTTClient: 0x3fff167c
Address of GLB_MQTT_Publish: 0x3fff17e4
Address of GLB_MQTT_Subcribe:0x3fff17f4
Address of GLB_secureClient: 0x3ffef170
Address of GLB_MQTTClient: 0x3fff27ac
Address of GLB_MQTT_Publish: 0x3fff220c
Address of GLB_MQTT_Subcribe: 0x3fff2914
可能是什么问题
最佳答案
您误解了如何使用堆。您在堆上实例化 GLB_MQTTClient、GLB_MQTT_Publish、GLB_MQTT_Subcribe 两次,然后出现小的内存泄漏,您丢失了指向在声明部分中实例化的类的指针。仅声明一个指针,然后在 initNormalConnection() 中实例化一个对象。
代码摘录:
WiFiClientSecure GLB_secureClient;
//Init with default value, cuz the library does not have default constructor
Adafruit_MQTT_Client *GLB_MQTTClient;
Adafruit_MQTT_Publish *GLB_MQTT_Publish;
Adafruit_MQTT_Subscribe *GLB_MQTT_Subcribe;
void initNormalConnection()
{
printf("\n\nAddress of GLB_secureClient: %p\n", &GLB_secureClient);
printf("Address of GLB_MQTTClient: %p\n", GLB_MQTTClient);
printf("Address of GLB_MQTT_Publish: %p\n", GLB_MQTT_Publish);
printf("Address of GLB_MQTT_Subcribe: %p\n", GLB_MQTT_Subcribe);
GLB_secureClient = WiFiClientSecure();
GLB_secureClient.setFingerprint(FINGER_PRINT);
GLB_MQTTClient = new Adafruit_MQTT_Client(&GLB_secureClient, BROKER_HOST, BROKER_PORT);
GLB_MQTT_Publish = new Adafruit_MQTT_Publish(GLB_MQTTClient, pubTopic, MQTT_QOS_1);
GLB_MQTT_Subcribe = new Adafruit_MQTT_Subscribe(GLB_MQTTClient, subTopic, MQTT_QOS_1);
...`
关于ssl - Adafruit MQTT 库错误连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57642422/
我无法弄清楚使用此语法初始化类实例的好处 Adafruit_8x8matrix matrix = Adafruit_8x8matrix();,而 Adafruit_8x8matrix matrix;
我正在编写读取文件并将其发送到 20x4 LCD 的代码,并且我有按钮,因此我可以在文件中上下移动 ` import math import time import linecache import
我写了一个脚本,使用 adafruit motor hat 库在接收到 433MHz ex 传输代码时控制电机!目前射程很短,但这是我项目的最佳方式! 问题是 433MHz rx/tx 库是 pyth
Adafruit_MQTT 库很棒,但我遇到了问题。我在 Arduino 中将它与 NodeMCU (ESP8266) 一起使用。示例代码一切正常。 (TLS 连接 - WiFiClientSecur
我正在使用带有 AdaFruit pn532 NFC/RFID 防护罩的 Arduino UNO。目标是有一个带假底的鞋盒。在那个假底下面是我的原型(prototype),它希望能够分辨出假底上方盒子
我正在尝试通过 3g 和 TCP 连接向服务器发送数据包。下面是我找到的 .cpp 和 .h 文件的链接: https://os.mbed.com/users/Nels885/code/Adafrui
我正在开发一个项目,需要 GPRS 连接并同时发送短信。 我正在使用 Raspberry Pi 和 adafruit fona。 我按照此 FONA Tethering to Raspberry Pi
我是 Python 新手,目前正在我的 Pi 3 mod b 上开发一个项目。我使用 Adafruit ADC1015 来转换模拟信号。但是,即使我有获取一些伏特测量值的代码,我也会收到“Attrib
我运行安装程序 from this website让我的 arduino 使用 AdaFruit LED。并运行: sudo pip3 install adafruit-circuitpython-n
我有一个 Adafruit (Gemma)/Arduino 和一个 Neopixel LED 环,我想从《魔兽世界》游戏内事件中控制它们。这部分是焊接和工作的。 问题: 有什么方法可以在魔兽世界和 P
我正在尝试将从十六进制字符串转换的字节数组写入 NTAG203 RFID 标签的内存中。我使用的是 Raspberry Pi 3、PN532 芯片和 Adafruit PN532 python lib
将 mbed 操作系统和 stm32 核板与 Adafruit Fona 3g 结合使用,我正在尝试通过 3g 连接将数据发送到服务器。我正在使用此处发布的 .cpp 文件和 .h 文件:https:
我已经成功安装了 Adafruit_Gpio 包,当我尝试运行 adafruit 提供的 bme 传感器的示例文件时,出现以下错误: Traceback (most recent call las
我正在使用 Adafruit Ft232H breakout 将 GPIO 端口添加到我的 Linux 电脑。虽然我在使用 libftdi 和 bitbang 模式闪烁 LED 灯时取得了一些成功,但
我一直在为我的 arduino ATMega2560 试验 I2C 和 mcp23017 IO 扩展器芯片,因为我宁愿使用 arduino 本身上的 IO 来做其他事情,我只是想知道如何使用 adaf
所以我试图将图像的字节数组放入外部 eeprom (c24LC16B) 并使用 Adafruit gfx 库中的 drawBitmap() 函数在 Nokia 3310 LCD(带有 Adafruit
希望你们中的任何一个能帮助我! 我正在尝试使用 Adafruit SHT31-D (一个 i2c 设备)板和我的 Pi2。我要离开 this datasheet指导我的编码工作。我正在使用 Wirin
我是 Arduino 的新手,我正在尝试使用 Adafruit Motor Shield V2.3 运行直流电机。我按照 Adafruit 网站上的说明进行操作,但是当我上传代码时我的电机没有启动。我
关于我关于 SO 的最后一个问题,我正在研究一个由 Arduino Mega 控制的交互式 14x14 LED table (有关设置和代码的更多信息,请查看 here。在解决了数据以错误的顺序到达
我正在尝试编写一个程序来在 Adafruit 60 LED 灯带上显示特定的灯光序列。目标是我将在代码中手动输入一个 DNA 序列,当程序运行时,每个碱基都会在 strip 上显示自己的颜色。这是到目
我是一名优秀的程序员,十分优秀!