Oh man, I just realized the “weird double quote” thing I referenced above wasn’t you at all, it’s this hologram.io message board. I would encourage you not to copy/paste from here into the IDE but to type it into the IDE manually.
So, these escape characters are not part of the Arduino IDE, but part of the C and C++ programming languages. As you have seen, they came from the need for programmers to type “untypeable” characters such as a newline, or audio bell. So they came up with the idea of using a backslash followed by a normal, “typeable” character, for example “backslash a” being the audio bell.
Then of course, they had the problem of how to represent the backslash character, because now it has special meaning. So when the IDE is trying to understand a string such as “this is a string of characters” , when it sees a backslash, it knows that this backslash and the next character will need to be combined to form a single, special character. So - if we just want our string to actually have a backslash character in it - not a special character - you have to have two backslashes in a row. Then the IDE knows OK, the programmer just wants to actually have a backslash character in this string.
Using a double quote character is the same, because as the IDE is reading your string, if it sees a double quote character, it will think it’s the end of the string, but if it sees backslash double quote, it knows OK, the programmer just wants to actually have a double quote character in this string.
How this relates to CIPSEND is that you have to put in the number of characters you’re about to send, right? So if you are sending the string
"this is going to be sent"
then you have to tell CIPSEND that you’re sending exactly 24 characters. But if you are sending the string
"this is going\nto be sent"
while there are literally 25 characters in the string above, the IDE will turn that backslash n into one character so it’s actually only 24. The same is true for all of the escaped characters. A backslash followed by another character is going to only count as 1 character.
I’d bet this character count issue is your issue.
I definitely encourage simplifying what you’d send, i.e. leave off the tag and get this working:
"{"k":"^n@vcvwhX","d":"Hello World"}"
which I think would be
"{\"k\":\"^n@vcvwhX\",\"d\":\"Hello World\"}"
then change to this
"{"k":"^n@vcvwhX","d":"Hello\nWorld"}"
which I think would be
"{\"k\":\"^n@vcvwhX\",\"d\":\"Hello\nWorld\"}"
and don’t change the number of characters that you’re telling CIPSEND you’re sending, which I think is 35. All I’ve done is replace the space character with a newline.