Jump to content

helloworld1029

Members
  • Posts

    16
  • Joined

  • Last visited

Everything posted by helloworld1029

  1. Hi, I am using Pmod ESP32 and figure out the possibilities to receive data from Thingspeak. Based on my research, I found this link may help me to get Thingspeak data via using AT command. The link is here: https://allaboutfpga.com/remote-monitoring-and-control-of-home-appliances-from-cloud-using-edge-artix-7-fpga-board/ Remote Monitoring and control of Home appliances from cloud using EDGE Artix 7 FPGA board (allaboutfpga.com). This picture (picture is from the link above) tells me what AT command I should use for receiving data from Thingspeak Cloud. I used the above-mentioned AT comments like "AT+CIPSEND=69" and "GET /channels/xxxxxxx/fields/1.json?results=1" to do the job. But I can't get the result I want. I expect there will be +IPD, <num of bits>:data rather than "Send OK" and "Recv xx bytes". These are the code: #include "xil_cache.h" #include "xparameters.h" #include "stdio.h" #include "xparameters.h" #include "xuartps.h" #include "xtime_l.h" #include "xgpiops.h" extern "C"{ #include "PmodESP32.h" } /******************************************************************************/ /* */ /* Defines */ /* */ /******************************************************************************/ #define HOST_UART_DEVICE_ID XPAR_PS7_UART_1_DEVICE_ID #define HostUart XUartPs #define HostUart_Config XUartPs_Config #define HostUart_CfgInitialize XUartPs_CfgInitialize #define HostUart_LookupConfig XUartPs_LookupConfig #define HostUart_Recv XUartPs_Recv #define HostUartConfig_GetBaseAddr(CfgPtr) (CfgPtr->BaseAddress) #define PMODESP32_UART_BASEADDR XPAR_PMODESP32_0_AXI_LITE_UART_BASEADDR #define PMODESP32_GPIO_BASEADDR XPAR_PMODESP32_0_AXI_LITE_GPIO_BASEADDR #define COUNTS_PER_SECOND (XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ /2) #define TIMER_FREQ_HZ 100000000 #define MAX_WIDTH 320 #define MAX_HEIGHT 240 #define MAX_BUTTON 16 /******************************************************************************/ /* */ /* Function Declarations */ /* */ /******************************************************************************/ void EnableCaches(); void DisableCaches(); void startup(); void receiveData(XTime time); void setWifiMode(void); void connectWifi(void); void establishConnection(void); void cipsend(void); /******************************************************************************/ /* */ /* Variables */ /* */ /******************************************************************************/ HostUart myHostUart; XGpioPs_Config *ConfigPtr; XGpioPs output; XTime TimeStart; XTime TimeEnd; PmodESP32 ESP32; int countdown =60; char counter[20]; int main() { EnableCaches(); startup(); setWifiMode(); xil_printf("Init Started\n\r"); connectWifi(); xil_printf("Wifi Done\n\r"); // sleep(2); XTime_GetTime(&TimeStart); TimeEnd = TimeStart + ((XTime)COUNTS_PER_SECOND); establishConnection(); cipsend(); DisableCaches(); return 0; } void startup(){ //Init ESP32 HostUart_Config *CfgPtr; ESP32_Initialize(&ESP32, PMODESP32_UART_BASEADDR, PMODESP32_GPIO_BASEADDR); CfgPtr = HostUart_LookupConfig(HOST_UART_DEVICE_ID); HostUart_CfgInitialize(&myHostUart, CfgPtr, HostUartConfig_GetBaseAddr(CfgPtr)); } void receiveData(XTime time){ XTime tEnd, tCur; u8 recv_buffer=0; u32 num_received=0; XTime_GetTime(&tCur); tEnd = tCur + (time * COUNTS_PER_SECOND); do { num_received = ESP32_Recv(&ESP32, &recv_buffer,1); if(num_received >0){ num_received = ESP32_Recv(&ESP32, &recv_buffer,1); xil_printf("%c", recv_buffer); } if(tCur == tCur + COUNTS_PER_SECOND){ countdown = countdown -1; } else XTime_GetTime(&tCur); } while (tCur < tEnd); } void setWifiMode(void){ u8 tx[]="AT+CWMODE=3\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); //usleep(100); receiveData(3); } void connectWifi(void){ u8 tx[] = "AT+CWJAP=\"SSID\",\"Password\"\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); //usleep(100); receiveData(30); } void establishConnection(void){ u8 tx[] = "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); receiveData(10); } void cipsend(void){ u8 command[150]; u8 finalcmd[50]; sprintf((char*)command, "GET https://api.thingspeak.com/channels/"ThingSpeak_Channel_Num"/fields/1.json?results=1" ); u32 length = strlen((char*)command); sprintf((char*)finalcmd, "AT+CIPSEND=%d\r\n", (int)length); u32 cmdlength =strlen((char*)finalcmd); xil_printf("Length %d\r\n", length); xil_printf((char *)finalcmd); ESP32_SendBuffer(&ESP32, finalcmd, cmdlength); //sleep(1); xil_printf((char *)command); ESP32_SendBuffer(&ESP32, command, length); receiveData(10); } void EnableCaches() { #ifdef __MICROBLAZE__ #ifdef XPAR_MICROBLAZE_USE_ICACHE Xil_ICacheEnable(); #endif #ifdef XPAR_MICROBLAZE_USE_DCACHE Xil_DCacheEnable(); #endif #endif } void DisableCaches() { #ifdef __MICROBLAZE__ #ifdef XPAR_MICROBLAZE_USE_ICACHE Xil_ICacheDisable(); #endif #ifdef XPAR_MICROBLAZE_USE_DCACHE Xil_DCacheDisable(); #endif #endif } Here is the result from Vitis Serial Terminal. No IPD response and Json Script included. AT+CWMODE=3 AT+CWMODE=3 OK Init Started AT+CWJAP="ssid","password" AT+CWJAP="ssid","password" WIFI DISCONNECT WIFI CONNECTED WIFI GOT IP OK Wifi Done AT+CIPSTART="TCP","api.thingspeak.com",80 AT+CIPSTART="TCP","api.thingspeak.com",80 CONNECT OK Length 71 AT+CIPSEND=71 GET https://api.thingspeak.com/channels/xxxxxxx/fields/1.json?results=1TCPED7 Recv 71 bytes SEND OK CLOSED Meanwhile, I tried the AT command in the Arduino and ESP01S. I can receive the IPD command and Java Script like following: 19:19:52.989 -> AT+CWMODE=3 19:19:52.989 -> 19:19:52.989 -> OK 19:20:02.336 -> AT+CWJAP="ssid","password" 19:20:02.336 -> WIFI DISCONNECT 19:20:04.486 -> WIFI CONNECTED 19:20:05.468 -> WIFI GOT IP 19:20:07.338 -> 19:20:07.338 -> OK 19:20:16.096 -> AT+CIPSTART="TCP","184.106.153.149",80 19:20:16.331 -> CONNECT 19:20:16.331 -> 19:20:16.331 -> OK 19:20:23.943 -> AT+CIPSEND=69 19:20:23.943 -> 19:20:23.943 -> OK 19:20:23.943 -> > fields/1.json?results=1 19:20:39.376 -> busy s... 19:20:39.376 -> 19:20:39.376 -> Recv 69 bytes 19:20:39.611 -> 19:20:39.611 -> SEND OK 19:20:40.207 -> 19:20:40.207 -> +IPD,296:{"channel": {"id":xxxxxxx,"name":"xxxxxxx","latitude":"0.0","longitude":"0.0","field1":"led1","field2":"led2","field3":"led3", "created_at":"2021-04-30T00:36:29Z","updated_at":"2021-04-30T00:37:05Z","last_entry_id":18}, "feeds":[{"created_at":"2021-06-07T11:13:39Z","entry_id":18,"field1":"0"}]}CLOSED For updating data from Zybo board to Thingspeak, I can receive the IPD command like following: AT+CIPSTART="TCP","api.thingspeak.com",80 AT+CIPSTART="TCP","api.thingspeak.com",80 CONNECT OK Length 135 AT+CIPSEND=135 GET http://api.thingspeak.com/update?api_key=xxxxxxxxxxxxxxxxxx &field1=0.64&field2=29.84&field3=488&field4=47.47&field5=139&field6=6.31 TCPED15 Recv 135 bytes SEND OK +IPD,3:420CLOSED Can anyone tell me how can allow Pmod ESP32 to receive the Java Script like how Arduino does. Thanks
  2. @dpaul thx for ur answer I have achieved to upload the data collected from pmod sensors to thingspeak. but i am just struggling with using pmod esp32 to retrieve data/ achieve iot control. i have achieved this with node mcu (made by esp32), now i want the pmod esp32 to do the same.
  3. @abalkonis Thanks for your question. I did not manually include anything. Most code are copied from other online sources and done by "trial and error". Also, I am using Vitis instead of SDK. Here is my define code #define HOST_UART_DEVICE_ID XPAR_PS7_UART_1_DEVICE_ID #define HostUart XUartPs #define HostUart_Config XUartPs_Config #define HostUart_CfgInitialize XUartPs_CfgInitialize #define HostUart_LookupConfig XUartPs_LookupConfig #define HostUart_Recv XUartPs_Recv #define HostUartConfig_GetBaseAddr(CfgPtr) (CfgPtr->BaseAddress) #define PMODESP32_UART_BASEADDR XPAR_PMODESP32_0_AXI_LITE_UART_BASEADDR #define PMODESP32_GPIO_BASEADDR XPAR_PMODESP32_0_AXI_LITE_GPIO_BASEADDR #define COUNTS_PER_SECOND (XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ /2) #define TIMER_FREQ_HZ 100000000 #define MAX_WIDTH 320 #define MAX_HEIGHT 240 #define MAX_BUTTON 16 To be more specific, please refer to the txt i have sent at first message. Thanks so much. Btw, are u going to send the data to Thingspeak?
  4. @abalkonis I did not draw a complicated connection in the block design. But sth must be careful is you have to connect the esp32 into 100Mhz. Regarding to the Vitis code, I looked for the AT command that allows me to send the data to thingspeak. (Ref Link: https://allaboutfpga.com/remote-monitoring-and-control-of-home-appliances-from-cloud-using-edge-artix-7-fpga-board/) Then, I used this link https://github.com/mitchellorsucci/ArtyS7PmodESP32 as a reference to recode. But I failed to receive the data from Thingspeak with Pmod ESP32. I am currently using the Zybo Z720, I don't know what board and what processor you use. Maybe the discrepancy between my board and your board results in the occurrence of your issue. I think this can help you. Anyway, the code above can help you to build connection between thingspeak to pmod esp32. Thanks
  5. Hello everyone, Is it possible for the Zybo z720 with Pmod ESP32 to achieve the smart home control system like Arduino? Something like this Thanks
  6. Previously I have asked this question in the forum, however, my explanation was not so clear and may result in confusion. Hence, I decided to rephrase my question in this new post. Currently, I have been researching on how to allow my Zybo z720 board to receive data from Thingspeak channel through using Pmod ESP32 and control the status of the LED according to the data of Thingspeak. I have already known how to send the data (collected from ALS, AQS and HYGRO) from the zybo board to Thingspeak by using the AT command. I will show the code below. void receiveData(XTime time){ XTime tEnd, tCur; u8 recv_buffer=0; u32 num_received=0; XTime_GetTime(&tCur); tEnd = tCur + (time * COUNTS_PER_SECOND); do { num_received = ESP32_Recv(&ESP32, &recv_buffer,1); if(num_received >0){ num_received = ESP32_Recv(&ESP32, &recv_buffer,1); xil_printf("%c", recv_buffer); } if(tCur == tCur + COUNTS_PER_SECOND){ countdown = countdown -1; } else XTime_GetTime(&tCur); } while (tCur < tEnd); } void setWifiMode(void){ u8 tx[]="AT+CWMODE=3\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(3); } void connectWifi(void){ u8 tx[] = "AT+CWJAP=\"xxxxx\",\"xxxxxx"\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(30); } void establishConnection(void){ u8 tx[] = "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); receiveData(10); } void cipsend(float temp, u16 co2, u8 light, float humidity){ u8 command[150]; u8 finalcmd[50]; //field1 Ph field2 Temp field3 co2 field4 humidity field5 light sprintf((char*)command, "GET http://api.thingspeak.com/update?api_key=xxxxxxxxxxxxx&field1=0&field2=%d.%02d&field3=%d&field4=%d.%02d&field5=%d\r\n" ,(int) temp_degc,((int) (temp_degc * 100)) % 100,co2,(int) hum_perrh,((int) (hum_perrh * 100)) % 100,light); u32 length = strlen((char*)command); sprintf((char*)finalcmd, "AT+CIPSEND=%d\r\n", (int)length); u32 cmdlength =strlen((char*)finalcmd); xil_printf("Length %d\r\n", length); xil_printf((char *)finalcmd); ESP32_SendBuffer(&ESP32, finalcmd, cmdlength); sleep(1); xil_printf((char *)command); ESP32_SendBuffer(&ESP32, command, length); receiveData(4); } Beforehand, I have tried this project with the NodeMCU since I thought the code I used for NodeMCU should be similar to ESP32. It worked perfectly. As I changed the thingspeak data link and updated the data, I can see my LED light up or light off. However, while I analysed the NodeMCU code, it does not use AT command and it also does not have any relationship with the code I used for sending data to Thingspeak. So, do I need to use the same AT command, or I need to use something like Json parsing to accomplish that? I will show all my work I have done below. Thanks Cpp Code Update 1.txt Arduino IoT Control.txt
  7. Hi to everyone. I have successfully tried to use Pmod ESP32 to upload the other Pmod sensors data into the Thingspeak and used GPIO inside the zybo board to control the LED when some Pmod sensor value is too high or too low. Now, my supervisor asked me and my team to do IoT control. For example, an user pressed the button in the webpage or mobile app, the LED which connected to zybo board can turn on or turn off. My teammate now can send the 1 or 0 data to Thingspeak. Now, I want to use my Zybo baord to receive the Thingspeak data that my teammate has made. I have been searching some tutorials on the website but they all that Arduino based project. Here is the resource I found: And below are what I have tired to create. Here is the block diagram and Vitis code I have write Here are my questions For Zybo baord to achieve the IoT control, should I modify the code I have written, or modify the arduino code shown in the Youtube video above. And how can I integrate together? I think I need to change/modify this part of code (this code is to send the data to thingspeak) in order to allow the zybo to receive the data from thingspeak and achieve the IoT control. But I am not sure. void receiveData(XTime time){ XTime tEnd, tCur; u8 recv_buffer=0; u32 num_received=0; XTime_GetTime(&tCur); tEnd = tCur + (time * COUNTS_PER_SECOND); do { num_received = ESP32_Recv(&ESP32, &recv_buffer,1); if(num_received >0){ num_received = ESP32_Recv(&ESP32, &recv_buffer,1); xil_printf("%c", recv_buffer); } if(tCur == tCur + COUNTS_PER_SECOND){ countdown = countdown -1; } else XTime_GetTime(&tCur); } while (tCur < tEnd); } void setWifiMode(void){ u8 tx[]="AT+CWMODE=3\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(3); } void connectWifi(void){ u8 tx[] = "AT+CWJAP=\"xxxxxxxxxxx\",\"xxxxxxxxxxxxxxx\"\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(30); } void establishConnection(void){ u8 tx[] = "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); receiveData(10); } void cipsend(float temp, u16 co2, u8 light, float humidity){ u8 command[150]; u8 finalcmd[50]; //field1 Ph field2 Temp field3 co2 field4 humidity field5 light sprintf((char*)command, "GET http://api.thingspeak.com/update?api_key=CE8VFL1E8ZJNGZM8&field1=0&field2=%d.%02d&field3=%d&field4=%d.%02d&field5=%d\r\n" ,(int) temp_degc,((int) (temp_degc * 100)) % 100,co2,(int) hum_perrh,((int) (hum_perrh * 100)) % 100,light); u32 length = strlen((char*)command); sprintf((char*)finalcmd, "AT+CIPSEND=%d\r\n", (int)length); u32 cmdlength =strlen((char*)finalcmd); xil_printf("Length %d\r\n", length); xil_printf((char *)finalcmd); ESP32_SendBuffer(&ESP32, finalcmd, cmdlength); sleep(1); xil_printf((char *)command); ESP32_SendBuffer(&ESP32, command, length); receiveData(4); } Thanks helloworld1029. Cpp Code Update 1.txt
  8. Hi to everyone here. I am constantly searching on connect two Pmods into one port. I have tried on "IOXP method" and "Daisy Chain Method", but I failed to achieve these two. After that, I found this post to tell me how to connect my two Pmods into one port. The link is here: I followed the post instruction carefully. And I successfully create the Vivado Block Design, as well as generate the bistream. I wrote my C code based on the demo code of Pmod AQS and Pmod ALS. Here is the block diagram and the xdc file After exporting to Vitis, I can successfully build my code. But the Vitis Serial Terminal said "Init Started" only, I think the new code failed to initialize two Pmods. I will place my code below. I also tried to place two different Pmod into two different ports, it works smoothly as the real data can be seen in the Vitis serial terminal. I wish anyone can help to troubleshoot my code and correct me if one of my step is wrongly done. Thanks in advance. Combine Test Code.txt
×
×
  • Create New...