gpt4 book ai didi

c - 通过 arduino 的 ENC28J60 模块发布 JSON 时出现奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 14:32:39 25 4
gpt4 key购买 nike

我已经成功设置了一个通过 Arduino 发布 JSON 数据的函数。我正在使用 webhook 来测试它,但我遇到了一些奇怪的行为。 JSON 数据没有在我期望的地方创建。任何解释这一点的帮助将不胜感激。

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[700];
static uint32_t timer;

const char website[] PROGMEM = "webhook.site"; //my router's address

// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Serial.println(">>>");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println("...");
}

void setup () {
Serial.begin(57600);
Serial.println("\n[webClient]");

if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println("x{\"city\":\"Paris\",\"temp\":18.5}"); /// << JSON message is created here, and the first character of the message is removed
if (!ether.dhcpSetup())
// Serial.println("DHCP failed");

ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);

if (!ether.dnsLookup(website))
// Serial.println("DNS failed");

ether.printIp("SRV: ", ether.hisip);
}

void loop () {
ether.packetLoop(ether.packetReceive());

if (millis() > timer) {
timer = millis() + 5000;
Serial.println();
Serial.print("<<< REQ ");
ether.httpPost(PSTR("/fe6f00eb-30ed-4b59-8908-fa3ec13c2485"), website, PSTR("Content-Type: application/json"),
PSTR(""), my_callback); // PSTR("") because the message is created after .begin function is called
}
}

最佳答案

Arduino 有两个完全独立的地址空间:程序存储器和 RAM。通常,指针指向 RAM。

PSTR("hello") 将字符串“hello”放入程序内存中并返回其在程序内存中的地址。如果从这个指针读取,实际上是从数据存储器的同一位置读取,并得到一些完全不相关的数据。您需要使用pgm_read_byte从程序存储器中读取(ENC28J60库不这样做)。

您的 PSTR("") 恰好与您在 setup 中打印的字符串的第二个字节具有相同的地址。

解决方案是删除 POST 数据周围的 PSTR()

我不确定是否记录了哪些参数需要位于程序存储器中,但我找到了函数 here它读取它们。看起来$F表示从程序存储器读取字符串,而$S表示从RAM读取字符串。 client_postval 使用 $S 读取。

关于c - 通过 arduino 的 ENC28J60 模块发布 JSON 时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59734579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com