W5100S-EVB-Pico OLED/DHCP
W5100S-EVB-Pico OLED/DHCP
0
Components
Hardware componentsW5500 Raspbery Pi Pico
x 1
OLED Display
x 1
Project description
DETAILS
WIZnet의 W5100S-EVB-Pico 보드에 OLED를 추가하고 DHCP 동작 시험을 해 보았습니다.
핀 구성은 아래 그림처럼 지난번 pico 보드에서 연결한 것과 동일하게 하였습니다.
처음에 로고를 출력하고 multicore_launch_core1() 함수를 이용해서 이더넷 처리와 메인함수를 코어 2개에 분리해서 동시에 처리하도록 하였습니다. 그래서 이더넷 처리와 다른 OLED와 CLI등 동시에 실행 가능합니다.
void apInit(void)
{
? ? cliOpen(_DEF_UART1, 115200);
? ? canOpen(_DEF_CAN1, CAN_NORMAL, CAN_CLASSIC, CAN_1M, CAN_1M);
? ? for (int i=0; i<32; i+=1)
? ? {
? ? ? ? lcdClearBuffer(black);
? ? ? ? lcdPrintfResize(0, 40-i, green, 16, " -- WIZnet --");
? ? ? ? lcdDrawRect(0, 0, LCD_WIDTH, LCD_HEIGHT, white);
? ? ? ? lcdUpdateDraw();
? ? ? ? delay(10);
? ? }
? ? delay(1000);
? ? lcdClearBuffer(black);
? ? lcdPrintfResize(0, 0, green, 16, "Getting IP..");
? ? lcdUpdateDraw();
? ? //multicore_launch_core1(loopback_test_main);
? ? //loopback_test_main();
? ? //dhcp_test_main();
? ? multicore_launch_core1(dhcp_test_main);
}
apMain()에서는 dhcp로 ip를 받아오면 OLED에 출력하도록 하였습니다. 그리고 CLI를 위해서 cliMain()을 호출 하고 있습니다.
void apMain(void)
{
uint32_t pre_time;
bool pre_dhcp_init = false;
while(1)
{
if (millis()-pre_time >= 500)
{
pre_time = millis();
ledToggle(_DEF_LED1);
}
if (dhcpIsInit() != pre_dhcp_init)
{
lcdClearBuffer(black);
if (dhcpIsInit() == true)
{
wiz_NetInfo net_info;
dhcpGetNetInfo(&net_info);
lcdPrintfResize(0, 0, white, 16, "IP %d.%d.%d.%d",
net_info.ip[0],
net_info.ip[1],
net_info.ip[2],
net_info.ip[3]);
}
else
{
lcdPrintfResize(0, 0, white, 16, "dhcp is empty");
}
lcdUpdateDraw();
pre_dhcp_init = dhcpIsInit();
}
cliMain();
}
}