Как опубликовать на Pubnub с помощью узла mcu?
У меня есть node mcu, и я пытаюсь использовать пример кода в блогах github и pubnub, чтобы отправить сообщение в качестве эксперимента, но не могу понять, как это сделать.
В качестве ссылки я использовал 2 примера — https://github.com/pubnub/arduino , https://www.pubnub.com/docs/arduino/data-streams-publish-and-subscribe
Вот код, который у меня есть. Я изменил его, включив в него некоторые библиотеки и свои ключи API. Дайте мне знать, какие изменения мне нужно внести: -
#include <ESP8266WiFi.h>
#define PubNub_BASE_CLIENT WiFiClient
#define PUBNUB_DEFINE_STRSPN_AND_STRNCASECMP
#include <PubNub.h>
String pubkey = "pub-c-4a9cdbca-5688-4939-a852-f63cf6743980";
String subkey = "sub-c-9b4067ae-1293-11e9-b4a6-026d6924b094";
String pubchannel = "sec-c-NmFiYjliODYtMTc3Mi00YTMzLTg0OWMtMDgzYjE2ZGUwNzg5";
void setup() {
/* For debugging, set to speed of your choice */
Serial.begin(9600);
/* Start the Pubnub library by giving it a publish and subscribe
keys */
PubNub.begin(pubkey, subkey);
}
void loop() {
/* Maintain DHCP lease. For other HW, you may need to do
something else here, or maybe nothing at all. */
/* Publish message. You could use `auto` here... */
PubNonSubClient *pclient = PubNub.publish(pubchannel, "\"message\"");
if (!pclient) return;
PublishCracker cheez;
cheez.read_and_parse(pclient);
/** You're mostly interested in `outcome()`, and,
if it's "failed", then `description()`.
*/
Serial.print("Outcome: "); Serial.print(cheez.outcome());
Serial.print(' '); Serial.println(cheez.to_str(cheez.outcome()));
Serial.print("description: "); Serial.println(cheez.description());
Serial.print("timestamp: "); Serial.println(cheez.timestamp());
Serial.print("state: "); Serial.print(cheez.state());
Serial.print(' '); Serial.println(cheez.to_str(cheez.state()));
pclient->stop();
/* Wait for news. */
PubSubClient *sclient = PubNub.subscribe(subchannel);
if (!sclient) return; // ошибка
String msg;
SubscribeCracker ritz(sclient);
while (!ritz.finished()) {
ritz.get(msg);
if (msg.length() > 0) {
Serial.print("Received: "); Serial.println(msg);
}
}
sclient->stop();
delay(1000);
}
Error:-
node_mcu_test_code:44:46: error: 'subchannel' was not declared in this scope
PubSubClient *sclient = PubNub.subscribe(subchannel);
^
node_mcu_test_code:54:14: error: 'class PubSubClient' has no member named 'stop'
sclient->stop();
^
exit status 1
no matching function for call to 'PubNub::begin(String&, String&)'
1 ответ
Лучший ответ:
▲ 1
Публикационный канал и подканал могут быть определены как любые значения переменной char.
Вот правильный код:-
const char * pubkey = "publisher key from your account";
const char * subkey = "subscriber key from your account";
const char * pubchannel = "demo_keyset";
const char * subchannel = "demo_keyset";
Затем ошибка исчезла
,
@Sultan Morbiwala
Смотрите также:
- ESP8266 не подключается к Wi-Fi
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Обнаружение ESP8266 в сети
- NodeMCU продолжает отключаться
- Соединение сетей Wi-Fi на nodemcu: как настроить esp8266 в качестве расширителя Wi-Fi, простейший случай
- Ошибка запуска FirebaseDemo в NodeMCU
- Как связать MPU9250 и NodeMcu?
- Как изменить тайм-аут загрузки ArduinoOTA?
что такое субканал? пабканал?, @Juraj
#include <PubSubClient.h>
— почему? никакие демонстрации или документы не говорят, что вам нужно это сделать, @Jaromanda X<PubSubClient> — это то, что я нашел на старых форумах, поэтому разместил его просто для проверки. Я указал суб- и паб-канал с ключом API. Если не так, то как это сделать., @Sultan Morbiwala
это то, что я нашел на старых форумах, поэтому оставьте это просто для проверки
не добавляйте вещи, не зная, что они делают, @Jaromanda Xкроме того, вы не объявили переменную с именем "субканал"... но вы пытаетесь использовать переменную с именем "субканал"... поэтому вы получаете сообщение об ошибке: "ошибка: "субканал" не был объявлен в этом область видимости` - потому что это не так, @Jaromanda X
Как объявить подканал? Это название канала, на который мы подписываемся, или секретный ключ API? Я попробовал указать название подканала, но не получилось. Название моего канала — «Demo Keyset»., @Sultan Morbiwala