close

arduino的Ethernet Shield是大家最常使用的網路模組,在這裡分享過去遇到問題

首先是連線數問題,由於arduino是single process晶片的裝置,無法做出mutli-thread

官網有寫最多同時支援4個socket connection(TCP/UDP)

然而親自做實驗時,第4個連線經常出現封包遺漏或連線莫名中斷?

因此之後在實做時,最多同時只用到3個連線

若裝置>4個時,沒有同步操作的必要時,建議可以1個1個連線

像2x2的電視牆,同時開啟電源也會有壓降過大、可能導致某些面板無法正常啟動

這時每一台都會間隔5秒開啟,以確保順利開機

這種情況就可以使用上述的,只用一個connection來開啟

下面寫個範例供大家參考:


#include "SPI.h"
#include "Ethernet.h"

/* Serial port receive buffer */
#define BUFFER_SIZE 16
char inBuffer[BUFFER_SIZE];

/* Enter a MAC address for your controller below */
byte MAC[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress IP(192, 168, 1, 100);

/* End deivces configuration */
EthernetClient CtrlClient;
IPAddress TV1(192,168,1,101), TV2(192,168,1,102), TV3(192,168,1,103), TV4(192,168,1,104);
int NowConnect = -1; /* avoid repeated connection */
int TV_PORT = 1234;  /* assume TV port is 1234 */
int idx;
void setup()
{
/* For voltage stable */
delay(300);
/* Ethernet deivce initialization */
Ethernet.begin(MAC, IP);
Serial.begin(9600);
}

void loop()
{
/* When user inputs command ..... */
while (Serial.available() > 0)
{
Serial.readBytes(inBuffer, BUFFER_SIZE);
switch(inBuffer[0])
{
case '1':
for (idx=1; idx<=4; idx++)
{
SetConnection(idx);
PowerOn();
delay(5000); // --> TV power on in every 5 seconds
}
break;
case '0':
for (idx=1; idx<=4; idx++)
{
SetConnection(idx);
PowerOff();
delay(1000); // --> TV power off in every 1 second
}
break;
default:
break;
}
}
}

void SetConnection(int _no)
{
unsigned long start;
Serial.print("Set Connection...");
Serial.println(_no);
/* Check which device hold the socket connection */
if (CtrlClient.connected())
{
if (NowConnect != _no) /* different device connection */
{
CtrlClient.stop();
Serial.println("Stopping Connection...");
}
else
return;
}

/* Connection is failed when connecting over 7 seconds */
start = millis();
switch(_no)
{
case 1: //IP: 192.168.1.101
while(!CtrlClient.connect(TV1, TV_PORT) && (millis() - start < 7000))
;
break;
case 2: //IP: 192.168.1.102
while(!CtrlClient.connect(TV2, TV_PORT) && (millis() - start < 7000))
;
break;
case 3: //IP: 192.168.1.103
while(!CtrlClient.connect(TV3, TV_PORT) && (millis() - start < 7000))
;
break;
case 4: //IP: 192.168.1.104
while(!CtrlClient.connect(TV4, TV_PORT) && (millis() - start < 7000))
;
break;
default:
break;
}
NowConnect = _no; /* remember last connection, avoid re-connection time wasting */
}


(Ethernet Shield,圖片來源 http://arduino.cc)

 

接下來分享以前使用網路板遇到的問題,希望對大家有幫助

拍賣上可以買得到許多家的網路板,我只能說.......一分錢一分貨!!

個人試過3家板子,有1家還特地買了兩個不同時期做出來的板子喔!

出問題的永遠是這一家............不過我是不會說是對岸的那一家做的啦~(啊....我好像說出國家了...)

遇到的問題大概有下列幾種:

1.接上電後無法正常啟動

這種情況有趣的是,有時候只要按下Reset鍵後,就會復活........當時就在推測.....

該不會用很差的被動元件,還是layout板子的技術太差導致啟動電壓未到位!?

在setup( )的第一行加入了延遲300ms,應該夠power sequence了吧!

沒有想到......竟然會成功.........事後再查了國外的論壇,有人的跟我解決方法一樣

 

2.跑一段時間後板子就掛

這種情況至今我也找不到解答....因為我同時間去實驗2個不同家的網路板

有一家用了大概7~15天,就會掛掉!只能做power reset的動作才回得來

我只好在arduino主程式裡加了每一個禮拜就自動software reset的程式碼

有興趣可以參考下面"代碼",提供兩種方法供客倌使用:

/* 1.Restarts program from beginning but does not reset the peripherals and registers */
void SoftwareReset()
{
  asm volatile ("  jmp 0");  
}

/* 2.declare reset function @ address 0 */
void(* SoftwareReset)(void) = 0;

 

3.自己白痴眼殘不先看官網說明

官網上寫得很清楚,arduino主板和網路板是靠SPI通訊協定做溝通

在Uno上是使用到pin 10, 11, 12和13;Mega上是pin 50, 51, 52和53

要是不小心用到以上這些pin.....只能怪....年輕人終究是年輕人....不看說明就衝動亂用...嘖...

另外網路板上支援SD card存取,只是SD card和網路晶片與arduino都走同一條SPI bus

至於那一個拿到使用權與arduino溝通,SD card要靠pin 4、網路要用pin 10

Ethernet W5100 : HIGH (disable)、LOW (enable)
microSD :HIGH (disable)、LOW (enable)

所以,倘若一開要讀取SD卡裡資料做初始化的話,要加入

 

#include "SD.h"

void setup()
{
/* Disable W5100 SPI before beginning SD */
pinMode(10,OUTPUT);
digitalWrite(10,HIGH);
/* Start-up SD */
SD.begin(4); // pin 4 = LOW
DoSomethingOfSD();
..............
}

 

 

 

 

';$(".articleExtAd").append(notVIP);setTimeout(function() {$('.top-toolbar').data('top-toolbar').setAD({title: "\u7db2\u8def\u6a21\u7d44\u9023\u7dda\u6578\u8207\u7576\u6a5f\u554f\u984c",label_id: 164,label_name: "\u8edf\u9ad4\u60c5\u5831"});}, 2000);

Greg / Xuite日誌 / 回應(0) / 引用(0)
沒有上一則|日誌首頁|沒有下一則
回應
加我為好友

《30cm冒險王》

全部展開|全部收合
關鍵字
  • Time 時鐘與RTC 即時時鐘
  • iRig 自製DIY
  • 紅外線遙控器整合使用智慧手持裝置控制
  • UDP函式庫喚醒電腦(Wake On Lan)
  • 網路模組連線數與當機問題
  • 聲音偵測 + RGB LED燈
  • arduino簡介
    沒有新回應!
  • 30cm Arduino
  • Low-Keyed
  • Tuvalu Adventure








離婚見證人

彰化離婚證人高雄離婚見證人







台北結婚證人桃園結婚證人新竹結婚證人台中結婚證人高雄結婚證人嘉義結婚證人







遺囑見證人結婚證人

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ireneq6p71l 的頭像
    ireneq6p71l

    暗室逢燈

    ireneq6p71l 發表在 痞客邦 留言(0) 人氣()