esp8266获取json后,无法在墨水屏显示中文

您所在的位置:网站首页 esp8266显示 esp8266获取json后,无法在墨水屏显示中文

esp8266获取json后,无法在墨水屏显示中文

2023-05-20 01:54| 来源: 网络整理| 查看: 265

我想用esp8266访问http://whois.pconline.com.cn/ipJson.jsp?ip=xxx.xxx.xxx.xxx&json=true这个api,然后将返回的ip“202.101.102.194”和city“福州市”,显示在与esp8266连接的墨水屏上用来表示定位。ip值的数字能正常显示,而city的“福州市”却不能显示(和中文有关的包括pro也不能显示但是region偶尔能莫名其妙显示个“琅”字),本人由于大学第一次接触esp8266,希望能帮我看看哪里出了问题,应该要怎么改,谢谢。

img

img

arduino串口显示的是这个,我定义了一个string类型的全局变量用来记录city的值,在displaytext()中使用了下面代码转换成const char*,用来配合u8g2.drawUTF8显示文字以下是我的全部代码:

#include #include #include #include #include #include #include //#define BME280_ADDRESS 0x76 GxEPD2_BW display(GxEPD2_420(/*CS=D8*/ 15, /*DC=D3*/ 4, /*RST=D4*/ 2, /*BUSY=D2*/ 5)); U8G2_FOR_ADAFRUIT_GFX u8g2Fonts; //extern const uint8_t u8g2_mfyuanhei_16_gb2312[] PROGMEM; #include "u8g2_mfyuanhei_16_gb2312.c" #include "u8g2_mfxinran_92_number.c" String city_rl=""; String ip_rl=""; void setup() { lianwang(); ipfrom(); displaytext(); } void loop() { } void displaytext(){ display.init(115200); display.setRotation(0); u8g2Fonts.begin(display); int16_t dataWidth; String str = "2023-5-13"; const char* character = str.c_str(); const char* ip_rll=ip_rl.c_str(); const char* city_rll=city_rl.c_str(); uint8_t size = 24; display.firstPage(); uint8_t SCREEN_WIDTH=400; do { uint8_t size = 101; u8g2Fonts.setBackgroundColor(0xff); u8g2Fonts.setForegroundColor(0x00); u8g2Fonts.setFont(u8g2_mfyuanhei_16_gb2312); dataWidth = u8g2Fonts.getUTF8Width(character); u8g2Fonts.drawUTF8((SCREEN_WIDTH - dataWidth)/2, size, character); Serial.printf("\ndataWidth: %d\n", dataWidth/8); u8g2Fonts.setFont(u8g2_font_wqy16_t_gb2312); dataWidth = u8g2Fonts.getUTF8Width("陶嘉骐制作"); u8g2Fonts.drawUTF8((SCREEN_WIDTH - dataWidth)/2, size*2, "陶嘉骐制作"); u8g2Fonts.setFont(u8g2_font_wqy16_t_gb2312); u8g2Fonts.drawUTF8(250, 150, ip_rll); u8g2Fonts.setFont(u8g2_font_wqy16_t_gb2312); u8g2Fonts.drawUTF8(200, 200, city_rll); const unsigned char gImage_weizhi[60] = { /* 0X00,0X01,0X14,0X00,0X14,0X00, */ 0XFF,0X0F,0XF0,0XFC,0X03,0XF0,0XF8,0X01,0XFF,0XF0,0X00,0XFF,0XF0,0X60,0XF1,0XE0, 0XF0,0X70,0XE1,0XF8,0X7F,0XE0,0XF0,0XFF,0XF0,0XF0,0XF7,0XF0,0X00,0XF0,0XF8,0X01, 0XFF,0XF8,0X01,0XFF,0XFC,0X03,0XFF,0XFC,0X03,0XF8,0XFE,0X07,0XFF,0XFE,0X0F,0XFF, 0XFF,0X0F,0XFF,0XFF,0X9F,0XFE,0XFF,0X9F,0XFF,0XFF,0XFF,0XFF,}; display.drawInvertedBitmap(350, 0, gImage_weizhi, 20, 20, GxEPD_BLACK); // 绘制反色位图 } while (display.nextPage()); display.hibernate(); } void lianwang(){ Serial.begin(115200); WiFi.begin("wif","11113333"); while(WiFi.status()!=WL_CONNECTED){ delay(500); Serial.print(".."); } Serial.println("ip address"); Serial.println(WiFi.localIP()); } void ipfrom(){ HTTPClient http; WiFiClient wifiClient; if (WiFi.status() == WL_CONNECTED){ http.begin(wifiClient,"http://whois.pconline.com.cn/ipJson.jsp?ip=xxx.xxx.xxx.xxx&json=true"); int httpCode = http.GET(); Serial.print(httpCode); http.setUserAgent("Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36"); if (httpCode==HTTP_CODE_OK) { String respone = http.getString(); //Serial.println(respone); StaticJsonDocument doc; DeserializationError error = deserializeJson(doc, respone); if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.f_str()); return ; } const char* ip = doc["ip"]; // "202.101.102.194" const char* pro = doc["pro"]; // "福建省" const char* proCode = doc["proCode"]; // "350000" const char* city = doc["city"]; // "福州市" const char* cityCode = doc["cityCode"]; // "350100" const char* region = doc["region"]; // nullptr const char* regionCode = doc["regionCode"]; // "0" const char* addr = doc["addr"]; // "福建省福州市 电信" const char* regionNames = doc["regionNames"]; // nullptr const char* err = doc["err"]; // nullptr ip_rl=ip; city_rl=city; Serial.println(ip_rl); Serial.println(city_rl); http.end(); } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3