このページはEtoJ逐語翻訳フィルタによって翻訳生成されました。

翻訳前ページへ


Tomorrow the World- Arduino as webserver. Input and 生産(高) across web- art5serv OVERALL HOME     Other 構成要素 for programmers, not Arduino 明確な/細部
ARDUINO: 最高の,を越す Page    支店 "A": Arduino Course    支店 "B": Arduino "How To"s and 事業/計画(する)s
ArduServer / ArduSimpSrv: Arduinos do TCP/IP
-d- Bookmark this on Delicious   Recommend to StumbleUpon

Arduino as Web Server

First Instance- ENC28J60 answer

With input and 生産(高) across the web (or LAN)

This page is browser friendly, by the way. Make your browser's window いっそう少なく wide than your whole 審査する and you will find the narrower columns much easier to read. For more tips like that, see my 力/強力にする Browsing hints.

陳謝s, Gentle Reader!...

On 12 October 2011, I went to my ArduServer, thinking I was just going to make one or two little tweaks. I did make those tweaks, most 顕著に 追加するing a "clicks" 反対する... but along the way I discovered some things that weren't really very 満足な. I thought that code was "finished". Sorry! If you tried it before, and didn't have a good result, or if you are working with the old code, may I grovel... m(__)m ... and 招待する you to try the updated code?



What does it do??

"It" is an Arduino based web server. Anyone out there in Internet Land who knows the URL can get a page from it. The page will 報告(する)/憶測 the reading from a light sensor 大(公)使館員d to the Arduino. The reading when the page was fetched. You have to re-負担 the page to check 現在の levels. The page has two buttons... one turns an LED on, the other turns it off. The LED 向こうずねs on the light sensor. The reading of the light sensor takes place a moment after the LED's 明言する/公表する is changed, so that it 反映するs the 明言する/公表する of the Arduino after the 現在の LED 明言する/公表する 命令(する). (The little "Gotcha" in that got me, the first time I built one of these!)

This ArduServer has also acquired a "clicks" 反対する which 報告(する)/憶測s how many (弁護士の)依頼人 requests the server has 扱うd since the most 最近の time it was rebooted. (以前... and the code for it is still in the sourcecode... it 単に 陳列する,発揮するd a 無作為の number.)


Another approach.. simpler TCP/IP (弁護士の)依頼人 - server interaction

Just before I turn to the 詳細(に述べる)s of how the Arduino can be a web server, I would point out to you that Arduinos can be other sorts of servers, too. A web server "plays nicely" with web browsers, such as Firefox. The browser is the server's (弁護士の)依頼人. Almost everyone using the internet has a browser on their machines. But if you 要求する your Arduino to be a web browser, you are (打撃,刑罰などを)与えるing unnecessary 総計費s.

If you are willing to 苦しむ the extra 重荷(を負わせる) of 得るing and mastering different (弁護士の)依頼人 ソフトウェア, it is possible to 始める,決める up an Arduino as a different 肉親,親類d of server. The 利益 is that there are より小数の 総計費s on the Arduino, so you can do more. An 付加 利益 is that the (弁護士の)依頼人 ソフトウェア can be written to do things a browser never dreamt of doing. Once you have mastered the Arduino as a web server, you might be 利益/興味d in my ArduSimpSrv, which I've written all about in the link.

See one in 活動/戦闘!

To see one in 活動/戦闘 go along to my directory of online ArduServers and ArduSimpSrvs. I will try to keep that up to date in 尊敬(する)・点 of things 存在 負かす/撃墜する, too, in 事例/患者 you are 実験ing with 接近ing them.

An email with your experiences would be very welcome, 特に if things didn't work 適切に!Here is how to email or 令状 this page's editor, Tom Boyd.

Please leave the LED on when you finish playing... that way I'll see someone tried the ArduServer the next time I look at it. (Thank you!... many 訪問者s are doing that for me!) I'm beginning to 追加する "click 反対するs" to the 装置s, and things that "beep" when an 接近 occurs, but it is still nice to be able to see with a ちらりと見ること if anyone has visited.


Where we are going with the 残り/休憩(する) of this page

The 残り/休憩(する) of this page is 充てるd to how I built my first ArduServer, the one on a very small Arduino (Atmega 168 based! 安価な and 限られた/立憲的な program memory and 肉体的に small). It also uses an 安価な Ethernet interface.

My ArduServer2 is working, and it probably makes more sense for you to do an ArduServer in the 金物類/武器類... W5100 based... used by the ArduServer2 if you don't mind a little more expense, not a lot, and you don't already have an ENC28J60 ethernet interface. However, the tutorial below may について言及する some things which got left out of ArduServer2's tutorial.

(This page was started in 2011. Please see my "March 2015 ENC28J60 update" page before buying or using one of them! (That page will open in a new tab. Just の近くに it to come 支援する here.))

There are two major programs 現在のd here.

The first program creates a webserver with $40 価値(がある) of 金物類/武器類, 含むing the Arduino clone. With it, your will create a page that can be 接近d from anywhere on the internet. In the first example, the page is 単に a "Hello World". 追加するing (警察などへの)密告,告訴(状) from sensors connected to the Arduino. How to 延長する it for that is covered along the way to the second program.

That's 権利: From anywhere in the world, someone can sit 負かす/撃墜する, type a URL into a browser, and what appears on their 審査する will come from your Arduino, "live". What you have the Arduino 配達する is up to you. The indoor and outdoor 気温s where the Arduino is, maybe? (Weak example, but 平易な to give. If you need to be told "things" to put on the webpage, stop reading now.)

The second program is the one that runs in my demonstration 場所/位置. It uses an Arduino with an LED and a light level sensor connected to it. That Arduino is the also connected to the internet, and it makes 利用できる to the world a page with two buttons on it: "Turn LED On" and "Turn LED Off". Click the button of your choice... while looking at the page in a browser window anywhere in the world... and the LED will go on or off as 要求するd.

The LED is arranged so that it 向こうずねs on the light level sensor. The web page also 陳列する,発揮するs a reading from the light level sensor... so you can "see" whether the LED 現実に went on or not. (I am so innocent.. a friend pointed out that I could have 始める,決める up a page where the number would change, without any sensor at all. But that's not what I did!)

Turning on an LED is not a big 取引,協定, of course. It is just an example, from which you can build whatever you need.

If you'll 許す a little self congratulation, I will 譲歩する that making all this happen was exciting!

STOP PRESS: It seems that maybe there's an element of bad advice in some of the pages this one is connected to.

It may be a bad idea to use any of the に引き続いて at the same time as a W5100 based 保護物,者. While this tutorial is about an ENC28J60 interface based system, your work might 同様に be W5100 friendly, too, don't you think?

... and D13, but this last one only if you "care" that on the 保護物,者 it goes to an LED, and from there through a resistor to ground. (This 単に 平行のs the same thing on many Arduino and clone boards... BUT, to digress from the digression, BE AWARE that the ソフトウェア behind "体制/機構()" and "宙返り飛行()" pulse D13 high 簡潔に before 遂行する/発効させるing whatever you 明示するd in "体制/機構()".)

The 金物類/武器類 and ソフトウェア covered in this tutorial now 推定する/予想する...

修正するing the ソフトウェア was 平易な.

To change the line used for, say, the phototransistor watching the LED in the line....

int8_t sensorPin = A1;  // 指定する the input pin for a sensor... a phototransistor used in example

...was changed to...

int8_t sensorPin = A3;  // 指定する the input pin for a sensor... a phototransistor used in example

... and that was all that was needed. I hadn't "planned" to need to change the 配分 of the sensor to that analog input... but 令状ing the code that way was just a 事柄 of good programming. (I had to move one wire on your breadboard, too, of course, to move on from the 初めの design.)

Sorry! I could have done without this, too! When will the 公式の/役人 Arduino 場所/位置 have proper documentation of the ethernet 保護物,者 and library??

Whew!...

As I was finishing the second program, I 設立する myself struggling to fit all the code into my Arduino clone... which I thought used an Atmega 328. Happily, it turned out that it was using an old Atmega 168... which has only 16k of 貯蔵 for the program. So! If the basics fit in 16k, then if you use even a now- unremarkable Atmega 328, it will give you another 16k of 貯蔵 for "the frills". There may still be 限界s on the size of "page" that the 装置 can serve, though.

It looked like I might have had to consider using a different library for my Ethernet 保護物,者, or a different 保護物,者, or a bigger Arduino... but the worst of the 早期に slopes of the learning curve are now behind me, and I can help you up, if you want to work through what follows. What I 述べる above does work, even in my little Arduino.

"Arduino" / "Arduino clone". From here onward, when I say "Arduino", please assume I mean "Arduino or clone". I do most of my work with a ModernDevice RBBB Arduino clone, $13 + p&p in easily 組み立てる/集結するd 道具 form, 4/11. ($22.50 組み立てる/集結するd.) (ModernDevice also sell the Arduino Uno, 組み立てる/集結するd, $30... with a different boot loader making 1.5k more memory 利用できる. It also has onboard serial-to-usb circuitry, and a 基準 Arduino 足跡, so using 保護物,者s is 平易な. It still uses an Atmega 328. For $65 you can blow past memory 問題/発行するs and get a bunch of other advantages with an Arduino Mega 2560. Memory: Mega vs older Arduinos: Flash: 256k vs 32k, SRAM: 8k vs 2k, EEPROM: 4k vs 1k. (I'd buy a Mega from Sparkfun, but there are 多重の sources.)

So far, my しっかり掴む of the ArduServer only 許すs it to serve one page. The content of that page is hardcoded into the program which 器具/実施するs the ArduServer. 公式文書,認める that what appears on the page is not やむを得ず static. You can, for instance, have it 陳列する,発揮する a reading from a sensor 大(公)使館員d to the Arduino. The reading 陳列する,発揮するd would be the reading at the last time the page was 接近d. There are probably ways to make the page 繰り返して reload itself, but I have little patience with such wastes of internet bandwidth and won't be going into ways to do it.

That "one page only"... for the simple ArduServer... will be disappointing, I know. However, the other 味方する of that coin is that the HTML that you use there can be very, very simple. Can be. But we will 器具/実施する some HTML forms before we are through on this page, so don't imagine that "Hello World" is all that the ArduServer can do!

This is probably the place to make the 簡潔な/要約する について言及する that Pachube deserves in this 状況. I've written more extensively about Pachube どこかよそで. It is a service in some ways like YouTube. It 許すs anyone to make a stream of data 利用できる to other internet 使用者s. The neatest thing about it is that you upload your data to the Pachube servers, and then they take care of serving that data to "the public". (Or a の近くにd community defined by you, for 極度の慎重さを要する data.) Not only can you, say, upload the depth of water in the river passing by your house 手段d once an hour for the past year, but the datafile can grow in real time. All you need... and this is where the ArduServer comes in... is a server with a webpage showing the 現在の depth of the water. (Or whatever). In the simplest (there are other) 体制/機構 of Pachube, their computers will visit your server from time to time, 収穫 the 最新の reading, and 追加する it to the data とじ込み/提出する. Pachube also 申し込む/申し出s your adoring public a variety of ways to 接近, 見解(をとる), 陳列する,発揮する the data in Pachube's 古記録s. A neat 製品 for 確かな 使用/適用s. Do, when you've finished 調査するing using the Arduino for a web server, have a look at Pachube... even if you don't what to 供給(する) data to them, there are some fascinating data streams you may wish to 接近. Sadly, as they gather 勢い, they are いっそう少なく "community" spirited. 解放する/自由な accounts now only 古記録 your data for the past 30 days. Their online 会議 doesn't always get 返答s to simple questions about 業績/成果 very quickly.

What will you need to create a webserver with an Arduino?

A big PC will be 伴う/関わるd in programming the Arduino, but it will not be 伴う/関わるd in the serving of the web page. It can be unplugged, turned off, etc, once the Arduino has been programmed.

You'll need an "always on" internet 関係, e.g. "broadband" or DSL or ADSL. You don't need a "static IP 演説(する)/住所", if that's worrying you. (We'll come 支援する to that 問題/発行する). You'll need a router, but you almost certainly already have one, if you've met the first 必要物/必要条件, above. Some familiarity with simple HTML coding would be a help, but isn't 必須の... you can 選ぶ up enough for the simple use of your ArduServer ("Arduino- driven- webserver") by looking at the code here. You'll need a way to connect your Arduino to your LAN, i.e. an Ethernet interface.

Ethernet interface

You need an interface to connect your Arduino to your LAN. (You will "talk to" the outside world through your router, and you will "get to" your router over your LAN).

Perhaps not the best choice.... hey! At the time I first wrote this , it was only three days since I'd 始める,決める up my first ArduServer!... but I am using a NuElectronics.com Ethernet 保護物,者 to connect my Arduino to my router. The price was excellent: about $24 from the UK to the UK, April 2011. They had the 装置 in 在庫/株, 配達/演説/出産 was excellent, and it was their tutorials which 許すd me the 打開s I am enjoying so much. And almost everything I've learned setting up my RBBB+NuElectronics ArduServer will be useful if I 調査する other 選択s later.

Another advantage of the NuElectronics 製品 for some of us is that it only needs to be 供給(する)d with 5v. Some of the modules discussed more frequently in the Arduino 会議s need to be 供給(する)d with 3.3 volts, 同様に. If you are using an Arduino Mega (at least), this won't be a problem, because there is a source of 3.3v from that... but some of us aren't using such 装置s... yet!

The RBBB does not have the 基準 Arduino 足跡. The NuElectronics interface is "a 保護物,者". No problem. There are just 7 関係s needed between the Arduino and the interface. Just plugging a 保護物,者 in is 冷静な/正味の... but wires work just 同様に for a few interconnections.

In March 2012, I became aware of a possible 代案/選択肢.. costing $6.50! (3/12, excl p&p)

It is the Arduino ENC28J60 Ethernet Module from Geeetech.

N.B.: I have not tried this module myself... but looking at the tech specs, I would guess that it would work just 罰金, and that the 指示/教授/教育s here are all you need to use it... You'll just have to adapt what is said about connecting the NuElectronics 保護物,者.

Second point to 公式文書,認める 井戸/弁護士席: The module must be 供給(する)d with 3v3. I believe its signal lines can be connected to a 5v Arduino without hassle or 構成要素s... but I'm not sure.

So! (明白に!): I would be delighted if this text helps you connect an Arduino to the internet with the Geeetech module, but can make no 約束s... apart from the 約束 of my 感謝 if you let me know what happens when you try to do what I think you can!

Beware... 安全 関わりあい/含蓄s...

Word of 警告... I don't know enough about the 安全 関わりあい/含蓄s of all of this. (That page doesn't say much more than I say here... but I hope to 拡大する it!) Because of that in particular, but in fact in general, do not read その上の unless you are willing to take ALL 責任/義務 for anything you do. I do not 受託する any 責任/義務 for anything YOU choose to do, even if they are based on things you read here. 支払う/賃金 me for advice, and that might change. But as things stand, I will refund what you've paid me for this if you are unhappy, and 否認する any その上の 義務/負債 for YOUR 活動/戦闘s. Okay. Now we can put the lawyers 支援する in their boxes? Oh. Privacy 政策. I 約束 not to do anything I think is bad. 井戸/弁護士席, not often. 信用 me if you want to. Go away if you don't.

Just to be (疑いを)晴らす: the (警察などへの)密告,告訴(状) here is 完全に 非公式の. It has not been written by or 是認するd by the people who brought us the Arduino or the RBBB or the NuElectronics Ethernet 保護物,者 or almost anything else that is について言及するd.

The Big Picture

Here's the "Big Picture" of where we are going....

Arduino as webserver

If you work through all of this page, you will learn how to 遂行する all of that. Creating the basic "Hello World" webserver is already explained first, which is a lot いっそう少なく work than all of the above. If you find this tutorial daunting... just spare a thought for the work of discovering everything without a 資源 with everything in one place, and of 令状ing it up. If you are really 肉親,親類d, maybe you'll either try some of my Windows freeware, or 寄付する to one of "my" charities?

To put your Arduino-driven "Hello World" on the web ("Hello world" takes on a new level of appropriateness!), can cost as little as $40 含むing the Arduino which will, in my 代案/選択肢 universe, be tied up serving your page 今後. What is not 含むd in the $40? The cost of the big computer you will use to program your Arduino, your cable for connecting your Arduino to your big computer for programming or your always-on broadband (DSL) internet 関係 and modem/router. You do not need a static IP 演説(する)/住所, or need to know what one is! (I only について言及する it as some people will be wondering and worrying.)

You do not need the "other 地元の server" shown in the diagram... but if you already have a server on your internet 関係: there's no need to 乱す it in any way.

You don't need to do anything with Pachube. But if you want to be part of Pachube, the server explained here is perfectly 有能な of 供給(する)ing a Pachube data 料金d.

First catch your....

I assume you have an always-on 関係 to the internet. I assume you have an Arduino or clone, and know a little bit about using it. I like the ModernDevice RBBB...

Arduino as webserver

... which is just 罰金 for what we are doing here.

You'll need a way to connect your Arduino to your LAN. An Ethernet 保護物,者 is the obvious way. I believe there are 代案/選択肢s. I'm using the 保護物,者 from NuElectronics because I wasn't surprised when I received it Wednesday morning after ordering it late on Monday, and because it was 安価な. ($25) I was in the UK at the time; they are in the UK. It would probably take a little longer to reach most of the people likely to read this... but not much.

Arduino as webserver

That's about it for the things you need to 得る! (含むing ソフトウェア to buy. You do have to download one 解放する/自由な library.)

Interface 半導体素子? WIZnet W5100? 保護物,者? 非,不,無-Arduino 足跡 clone?

I should について言及する that the NuElectronics Ethernet 保護物,者 uses a Microchip ENC28J60 interface. Interfaces based in the Wiznet W5100 seem to be more popular, and there are かもしれない 推論する/理由s... but I was new to the whole topic, and didn't want to 投資する a lot money until I knew more. (Wiznet 装置s are more expensive.) Much of what you need to master, arrange, do, to connect your server as explained in this essay will still be 関連した and useful if you later switch over to a Wiznet interface. No 約束s, but if at that time, you want to get rid of your Nuelectronics 保護物,者: get in touch with me!

If you are using an Arduino with the 基準 足跡, then you just plug your 保護物,者 into your Arduino. If you are using the RBBB, or 類似の, you need to connect the に引き続いて signals between the Arduino and the NuElectronics 保護物,者

That's it for the 金物類/武器類 you need, and how to hook it up!

(I 現実に had an Arduserver working 罰金 for a few months with no 関係 to D2, but a re-examination of the schematic 示唆するs that I せねばならない have a 関係 there. It is an 生産(高) from the 保護物,者. Who knows what the ethernet library wants to see coming on on D2, but I'm not leaving the signal to chance.)

The ソフトウェア...

Go to the NuElectonics 場所/位置, and read the tutorial on setting up an Arduino driven web-server. 最高潮の場面s from that:

For their and my "answer", 現在のd here, you need the library NuElectronics 供給する.

I have a little 公式文書,認める about 任命する/導入するing and using Arduino libraries, in 事例/患者 you 港/避難所't tried that before. At April 11, the NuElectronics etherShield library 任命する/導入するd very nicely... you just drag the folder at the root of the zip to the 権利 place, and 再開する your Arduino 開発 環境. That will give you the library and several useful example programs.

You may need to change a line in the program to 割り当てる your ArduServer an IP 演説(する)/住所 suitable to your LAN. You may need to change one line to change the MAC 演説(する)/住所 that the 装置 will 現在の. (All 装置s on a given LAN must be using different IP and MAC 演説(する)/住所s. Change the default IP 演説(する)/住所/ MAC 演説(する)/住所 if something else on your LAN has already been 割り当てるd the numbers in the code below.)

To 接近 your server from beyond your own LAN, over the internet, you will need a URL that is "you", and you'll need to put that into the line that says....

static char baseurl[]="http://192.168.0.240/";

... in the 見解/翻訳/版 of the デモ code below. N.B.: Unless you have a static IP 演説(する)/住所 on the WAN (you would know, if you do!), you will put something like "mon7nc.dyndns.org" in to 取って代わる the "192.168.0.240".

If the "mon7nc..." stuff is a bit daunting, start off with "192..." (修正するd as explained in other parts of this), which will let you 接近 the server from your LAN. You can then 取り組む the next 始める,決める of 障害s, and move it out の上に the internet, without having a lot of backtracking to do as the price of this "by 行う/開催する/段階s" approach.

A little aside. Don't worry too much about it, if it doesn't make sense to you. Your router can probably be told to 制限する the 地元の IP 演説(する)/住所s it 問題/発行するs 経由で DCHP to a subset of a 禁止(する)d. You could, for instance, tell it to use only 192.168.0.100 to 192.168.0.199 for DCHP 問題/発行するd IP 演説(する)/住所s. This is probably a good idea (a subset, not やむを得ず the one I gave as an example) for you, because your Arduino isn't clever enough to 参加する in DCHP, and will have a 直す/買収する,八百長をするd (地元の) IP 演説(する)/住所. (This is a 完全に separate 問題/発行する from the 事柄 of your "外部の" IP 演説(する)/住所, the one that is probably "dynamic", and will probably need dyndns services to を取り引きする.) By telling your router to 問題/発行する 地元の IP 演説(する)/住所s from a subset of a 禁止(する)d, you put yourself in the position of knowing other 地元の IP 演説(する)/住所s which can be used for things with 直す/買収する,八百長をするd IP 演説(する)/住所s... like the web page serving Arduino you will 始める,決める up, if you go through what is 述べるd in this tutorial. Once you've done something like this once, all sorts of other things... for instance IP cameras... become much easier. (You may want to use a 直す/買収する,八百長をするd 演説(する)/住所 for one of them, too.) One "price" of going the "simpler" 直す/買収する,八百長をするd 地元の IP 演説(する)/住所s 大勝する: You have to stay on 最高の,を越す of which 装置s have been 割り当てるd which IP 演説(する)/住所. you can have a camera and an Arduino both with IP 演説(する)/住所 192.168.0.240.... but only if they are not on the same LAN. Put them both on the same LAN, and you must first change the IP 演説(する)/住所 coded into one of them.

A word about something the server doesn't do...

If you have a website, even one hosted for you by a service, you will be used to having more than a 選び出す/独身 page. As 現在のd here, the ArduServer isn't as fancy as that. It just 現在のs one page. The fancy ArduServer, the second program 現在のd, isn't 完全に static. The numbers on it, i.e. the 無作為の number and the reading from the light sensor change, but that's about it elevating the program past the simple "Hello World" which is the fruit of our first program. (Even with the fancy page, the numbers only change when you click one of the buttons. What 使用者s see when they fetch the page is a 無作為の number chosen for them, and the light level at the moment the page was fetched. Even if the light level changes, the number on the 使用者's 審査する won't change before the page is re-fetched. (The 無作為の number is going to be 取って代わるd by a count of requests to the server since the 装置 was reset, and this page may not be got up- to- date すぐに. If you notice I've forgotten to 改訂する the text here, please email me?)

Anyway, here is the first program, the "HelloWorld" デモ. It is almost 完全に just the program I downloaded with the library (in the "Examples" folder) from NuElectronics. You'll never change the 広大な 大多数 of it, so don't worry about what it all means. If you skip 負かす/撃墜する to the end, you can see the bit that you will change to have the page you are serving up say something different to what is built into the デモ.

You need to know a little about creating HTML by 手渡す if you are going to edit those lines. But nothing very clever or 前進するd is necessary or wise.

I do, by the way, have some ArduServers online for you to try out. 非,不,無 of them are the modest "Hello World" page that the code below serves up, but they are ひどく based on the same code. They had to lose some of the "pretty" text to make room for the "neat" features.

(警察などへの)密告,告訴(状) not in the Nuelectronics tutorial:

(This paragraph and the next need editing, 合併するing. Sorry. Later?) As 現在のd, the code in the tutorial 限界s the 量 of text you can have on your web page... やめる 厳しく. I believe that you can 増加する the 量 of text on your webpage if you 増加する the setting of "BUFFER_SIZE" (初めは, in the NuElectronics example, 始める,決める to 500) in the 関連した line やめる 早期に in the program. (Certainly seem to have "got away" with 上げるing it to 520, for instance. I do have to 報告(する)/憶測 that it doesn't fail elegantly... if you try to put too much text into the page, it seems to 収集する and 負担... but when you try to fetch your page, your browser tries for a bit, but then just says "can't 負担". Hey! What do you want for $40??!) Of course, if you 増加する the 500, you decrease the 量 of memory 利用できる in your Arduino for the program, and features in your ArduServer.

その上の (警察などへの)密告,告訴(状) on the BUFFER_SIZE setting: Make it too small, and the program won't work, as the 衝撃を和らげるもの is 不十分な. Make it too large, or make your program too large, and parts of the 衝撃を和らげるもの that are there in theory will be in "places" where there is no silicon to 持つ/拘留する the numbers it is supposed to, and your program won't work. And, to make 事柄s worse, I don't know an 平易な way to know which 明言する/公表する you are in when the program isn't working. The "Binary sketch size" 報告(する)/憶測 which you get after 収集するing doesn't 含む the space 始める,決める aside for the 衝撃を和らげるもの... Sigh. There may be ways around this, and the problems are not insurmountable... but they are still tedious.

近づく the 最高の,を越す of the code is a line that says...

static char baseurl[]="http://yourdomain.com";

If you JUST want to use your Arduino server inside your LAN, 取って代わる that with http://192.168.0.240",or whatever 地元の IP 演説(する)/住所 has been 献身的な to your ArduServer. You DO use the numbers in the other places, even if you want the server 明白な outside the LAN. However... if you want it 明白な to anyone on the internet, first you need a URL. (That is discussed どこかよそで in this page.) Once you have your URL, put that in, e.g....

static char baseurl[]="http://mon7nc.dyndns.org/";

... is what I could put in because that is a URL for me. (I have to 追加する ":81", so that things for my ArduServer go to my ArduServer, instead of to the OTHER server on my connected to the internet LAN.. but that's also explained どこかよそで in this page.)

Don't be daunted! You don't need to even look at 95% of the に引き続いて... just copy it, paste it, use it!

#含む "etherShield.h"
//See 発言/述べる a few lines below here for source of 権利 library

/*ArduHelloWorld
ver: 18Apr2011

Derived from the example, "ethershield_webserver.pde"
供給(する)d with the necessary library "etherShield". Only
限られた/立憲的な changes, mostly cosmetic. The library comes from
http://www.nuelectronics.com/download/事業/計画(する)s/etherShield.zip

Info on using libraries 含むd in tutorial below...

This ソフトウェア discussed in tutorial...
http://sheepdogguides.com/arduino/art5serv.htm

Changes were done by TK Boyd, of
http://sheepdogsoftware.co.uk

See also http://ArduServer.com

*/

/*==============
Define the MAC 演説(する)/住所 the 装置 will 現在の to the LAN
  All MAC 演説(する)/住所s on a given LAN must be different from each other.
  公式文書,認める: The values are separated with commas. */

static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};

/*Define the IP 演説(する)/住所 the 装置 will 現在の to the LAN
  All IP 演説(する)/住所s on a given LAN must be different from each other.
  公式文書,認める: The values are separated with commas. */

static uint8_t myip[4] = {192,168,0,240};

/*Define the port your server will use. 普通は,
  port 80 is used, but others are possible,
  if you know what you are doing.*/

#define myport 80 //no ; here

/* To use this code for a server accessible only on your LAN,
   you will need to 修正する the next line if you changed either
   the IP 演説(する)/住所 or the port on the lines just above here.

   If you are using IP 演説(する)/住所 80, and IP 演説(する)/住所 192.168.0.240, then
   始める,決める baseurl[] to http://192.168.0.240/, which is how the this
   ソフトウェア was 地位,任命するd on the web.

   If you are using a different port, say, 81, then 始める,決める myport
   to the port you chose to use.

   If you want your ArduServer to be "seen" from anywhere on the
   internet (or on your LAN) 取って代わる the digits with the URL for
   your system. In my 事例/患者, for example, I might use...
      http://mon7nc.dyndns.org

   If you are using a 非,不,無-基準 port, i.e. some port
   other than 80, you do NOT 追加する the port number, after a 結腸.
   So, in my 事例/患者, using port 81, I would NOT 始める,決める baseurl to....
      http://mon7nc.dyndns.org:81 << DON'T DO THIS

   */

static char baseurl[]="http://192.168.0.240/";

/*You may need to change the 衝撃を和らげるもの size... if you change
  the 量 of text on the webpage served, or the 量
  of code in your 見解/翻訳/版 of the program.

  N.B.: The size of the 衝撃を和らげるもの is fussy... too big or too small, and
  you will get hard-to-debug problems. (Worst 事例/患者: The code 収集するs
  and runs, but when you ask for the page it is meant to serve, the
  (弁護士の)依頼人 waits and waits until the browser times out.

  Make the 衝撃を和らげるもの too (unnecessarily) big, and you 減ずる the 量
  of code you can 挿入する to 追加する Good Stuff to your ArduServer
  without getting any 利益 from the over-large 衝撃を和らげるもの.

  Make the 衝撃を和らげるもの too small, and I think you will 遭遇(する) over-run
  and 衝突,墜落 the server.

  I believe that if you 追加する enough text to the page 存在 served,
  you have to 増加する the 衝撃を和らげるもの size.

  There may also be another 限界 to the 量 of text which can
  be on a served page, but I'm not sure about this yet.

  "Text" in both 事例/患者s discussed above 含むs the HTML tags.*/

#define BUFFER_SIZE 550
static uint8_t buf[BUFFER_SIZE+1];

//The に引き続いて does NOT have to be changed, even if you've
//   changed MAC 演説(する)/住所, IP 演説(する)/住所 or port.
static uint16_t mywwwport =myport; // listen port for tcp/www (max 範囲 1-254)

#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

//The next two lines puzzle me, TKB. But even though I don't believe
//   they are doing what the 初めの 発言/述べる says, they do no 害(を与える),
//   and may be doing good, so I left them!

// 準備する the webpage by 令状ing the data to the tcp send 衝撃を和らげるもの
uint16_t print_webpage(uint8_t *buf);
int8_t analyse_cmd(char *str);


/* ============  体制/機構() =============================== */
無効の 体制/機構(){

//You can 挿入する your own code here....


//....to initialize things for features you have 追加するd.


/* HERE BEGINS code from NuElectronics web server デモ*/

//initialize enc28j60
es.ES_enc28j60Init(mymac);
es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
延期する(10);

/* Magjack LEDs configuration, see enc28j60 datasheet, page 11 */
// LEDA=green LEDB=yellow
//
// 0x880 is PHLCON LEDB=on, LEDA=on
// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x880);
延期する(500);
//
// 0x990 is PHLCON LEDB=off, LEDA=off
// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x990);
延期する(500);
//
// 0x880 is PHLCON LEDB=on, LEDA=on
// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x880);
延期する(500);
//
// 0x990 is PHLCON LEDB=off, LEDA=off
// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
es.ES_enc28j60PhyWrite(PHLCON,0x990);
延期する(500);

// 0x476 is PHLCON LEDA=links status, LEDB=receive/送信する/伝染させる
// enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
es.ES_enc28j60PhyWrite(PHLCON,0x476);
延期する(100);

//init the ethernet/ip 層:
es.ES_init_ip_arp_udp_tcp(mymac,myip,myport);

}// end "体制/機構()"



/* ============  宙返り飛行() =============================== */
無効の 宙返り飛行(){

/*You can 挿入する your own code here, to 器具/実施する extra
     features of your own. Your code should not take long
     to 遂行する/発効させる, and it certainly should not "封鎖する"
     the 加工業者.

You CAN (in fact I will!) 追加する things in other places... but
     the chance of messing up the web serving is greater.*/


//End of best area for 追加するing your own code.


/* HERE BEGINS code of "宙返り飛行()" from NuElectronics
  web server デモ*/

uint16_t plen, dat_p;
int8_t cmd;

plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

//plen will be NOT equal to 無 if there is a valid packet (without CRC error)
if(plen!=0){

    // arp is broadcast if unknown but a host may also 立証する the mac 演説(する)/住所
    //      by sending it to a unicast 演説(する)/住所.
    if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
      es.ES_make_arp_answer_from_request(buf);
      return;
    }

    // check if ip packets are for us:
    if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
      return;
    }

    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
      es.ES_make_echo_reply_from_request(buf,plen);
      return;
    }

    // tcp port www start, compare only the lower byte
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
         es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn, ack
         return;
      }
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
        es.ES_init_len_info(buf); // init some data structures
        dat_p=es.ES_get_tcp_data_pointer();
        if (dat_p==0){ // we can かもしれない have no data, just ack:
          if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
            es.ES_make_tcp_ack_from_any(buf);
          }
          return;
        }
        if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
          	// 長,率いる, 地位,任命する and other methods for possible status codes see:
            // http://www.w3.org/議定書s/rfc2616/rfc2616-sec10.html
            plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 承認する\r\nContent-Type: text/html\r\n\r\n<h1>200 承認する</h1>"));
            goto SENDTCP;
        }
 	if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
                plen=print_webpage(buf);
            goto SENDTCP;
         }
        cmd=analyse_cmd((char *)&(buf[dat_p+5]));
        if (cmd==1){
             plen=print_webpage(buf);
        }
SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
           es.ES_make_tcp_ack_with_data(buf,plen); // send data
      }
    }
  }

}//end of "宙返り飛行()"



/*============ Subordinate subroutines, from NuElectronics デモ ===== */

uint8_t find_key_val(char *str,char *重要な){
// The returned value is 蓄える/店d in the 全世界の var strbuf

        uint8_t 設立する=0;
        uint8_t i=0;
        char *kp;
        kp=重要な;
        while(*str &&  *str!=' ' && 設立する==0){
                if (*str == *kp){
                        kp++;
                        if (*kp == '\0'){
                                str++;
                                kp=重要な;
                                if (*str == '='){
                                        設立する=1;
                                }
                        }
                }else{
                        kp=重要な;
                }
                str++;
        }
        if (設立する==1){
                // copy the value to a 衝撃を和らげるもの and 終結させる it with '\0'
                while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                        strbuf[i]=*str;
                        i++;
                        str++;
                }
                strbuf[i]='\0';
        }
        return(設立する);
}// end of "find_key_val()"


/*==========================*/
int8_t analyse_cmd(char *str)
{
        int8_t r=-1;

        if (find_key_val(str,"cmd")){
                if (*strbuf < 0x3a && *strbuf > 0x2f){
                        // is a ASCII number, return it
                        r=(*strbuf-0x30);
                }
        }
        return r;
}// end of "analyse_cmd()"


/* ============  PRINT WEB PAGE ==================*/
/* You make changes within this subroutine to change
   what your webserver serves up to the world.

   Be a little careful about what you do... don't
   get too adventurous! We'll look at fancier stuff
   in the next program. For now, we're just trying
   to get started!                                 */


uint16_t print_webpage(uint8_t *buf){

uint16_t plen;

/*This first line is part of the "wrapper" for what you are sending,
     and I wouldn't mess with it unless you know more about all of
     this than I do! */
plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 承認する\r\nContent-Type: text/html\r\n\r\n"));

/*Next we have one or more lines which all start....

   plen=es.ES_fill_tcp_data_p(buf,plen,PSTR

... and end with....

   ("x"));

   ... but with something more 利益/興味ing that x between the "s.

That "something more 利益/興味ing" will be HTML.

If you need a 引用する 示す (") inside the 引用する 示すs, use \"

The HTML you see in my example is Very Bad HTML... but it is
  important to (土地などの)細長い一片 the code 負かす/撃墜する to the shortest form you can
  find will work. If you 始める,決める your ArduServer to send too many
  characters, not only will it fail to serve them, it won't even
  fail gracefully. You may, for instance, find that when you try
  to 接近 the page, your browser 単に hangs up with "Connecting
  to..." until it times out. There MAY be a 限界 to the number of
  characters on the page in 新規加入 to the 限界 課すd by the
  value in BUFFER_SIZE... I am still trying to get to the 底(に届く)
  of where the 限界s are to what I am trying to do, so I can
  work around them!                                            */

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<中心><h1>Welcome: NuElectronics Ethernet 保護物,者 Server デモ</h1>"));

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><h2><font color=\"blue\">"));

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>Tweaked 17 April 2011, Sheepdogsoftware.co.uk"));

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>HELLO WORLD!</font></h2></中心>"));

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr>V1.0 <a href=\"http://nuelectronics.com\">nuelectronics.com<a>"));

return(plen);
}//end of "print_webpage"

Put the above in your Arduino, plug the Arduino into your LAN, and, if you don't get firewall and IP 演説(する)/住所 衝突/不一致s, you should find that when you enter 192.168.0.240 into an internet browser on any PC on your LAN, you will get a "Hello World" page... from your Arduino!

冷静な/正味の, or what?!!

(If you answered "What", you can stop reading now. You are beyond help.)

Making that 利用できる to the world! across the web isn't much harder. You've done the hard bits. We'll look at that next, after a little review....

So far...

(You might want to open the page again in a new window, and arrange to have both the text you are reading now and the big diagram 近づく the 最高の,を越す of the page 明白な at the same time.)

So far, I have, I hope, made (疑いを)晴らす to you how to 始める,決める up your Arduino so that it will serve a simple "Hello World" page over your LAN to any PC on that LAN.

Start at the 底(に届く) of the big diagram. We have not looked at inputs or 生産(高)s for the Arduino yet. The page the program above serves does not have the "Light Level: 57" line, or the "On" or "Off" buttons, or a way to 答える/応じる to them, once they are 供給するd.

But we have talked about the Arduino, and made a good start on the programming 要求するd. We have talked about the Ethernet interface. (We're done talking about that now.) The Ethernet interface's 関係 to the router is in place... it is 簡単に the Ethernet cable

Not shown on the diagram is a PC connected to the router. It could, in fact, be the PC 存在 used for developing the Arduino's ソフトウェア. I left the arrow between it and the router out of the diagram in hopes of 避けるing 混乱. All of the 装置s on the same LAN as the Arduino will be connected together 経由で the router.

We 港/避難所't talked about the USB interface between the 開発 PC and the Arduino, so I'll do that now. It is nothing more than whatever you 普通は use for programming your Arduino. Although it is more appropriate to a general discussion about Arduinos and clones, I will について言及する one thing you may not have come across: You can buy Arduinos with, and without, the USB interface circuitry 会社にする/組み込むd on the Arduino. You can buy simple USB cables, which are nothing more than some connectors joined by wires, or "fancy" USB cables which at one end plug into a USB port and at the other end plug into an Arduino without USB circuitry, and which have, in the cable, the circuitry you need.

If you are only ever going to have one Arduino, it doesn't 事柄 which 大勝する you choose, other than the fact that you've made a 誤った start if you later decide you do want more than one Arduino.

If you are going to have several Arduinos, it makes sense to buy the simple Arduino and the fancy cable. The USB circuitry isn't needed except for programming the Arduino, in many 使用/適用s. Once the Arduino is programmed, the programming cable is unplugged, and any USB circuitry on the Arduino is superfluous to getting done whatever 職業 the Arduino is 献身的な to. Why 支払う/賃金 for 多重の instances of the USB circuitry, if you are only using it with one Arduino at a time?

Enough about the "USB Interface" box on the diagram! (I hope... do 令状, if you want more on this, or if this section needs 改正... after you have read the 構成要素 at the "General Discussion..." link a few paragraphs 支援する.)

Onward!....

Beyond the LAN...

The first thing you're going to have to を取り引きする to make your Arduino webserver 明白な to the world (!) is to either have a static IP 演説(する)/住所, which may be the 事例/患者 for some lucky readers.... but isn't likely to be the 事例/患者 for you, mortal reader. I don't have one, and am jealous if you are one of the lucky ones!

Instead of using a static IP 演説(する)/住所, mortals make use of the 解放する/自由な service from Dyn.com, 以前 known as DynDns.org, or a 類似の service from some other provider. The 指名する derives from "dynamic domain name service. More on this in a moment.

I'll try to come 支援する and say more about this later, but for now, after the next few paragraphs, just pop off to their website (link: above), and read what they tell you. You can use their service for 解放する/自由な, if you don't 地雷 a small nuisance, or, for not very much, you can 支払う/賃金 to make the nuisance go away.

We 普通は use things like "http://bbc.co.uk" to go to a website. "bbc.co.uk" is a domain 指名する. However, behind the scenes, the internet uses numbers. Places you visit have numbers, and you have a number, when you are using the internet. These numbers are "IP 演説(する)/住所s". Part of why the internet is so 平易な to use is that there's a 機械装置 which looks up the numbers for us, from things like "Http://bbc.co.uk". The part of the internet that does this looking up is the DNS, the domain name service, which (機の)カム up a moment ago. ("DNS" is also いつかs defined as "Domain 指名する System", and then you would talk about a "DNS service", 供給するd by DNS servers".) It is a bit like a telephone directory... in a world where people's telephone numbers change more frequently than they do in this world. The BBC's webpage has been at bbc.co.uk for many years... but the IP 演説(する)/住所 for that website has probably changed many times. But, thanks to DNS, I have no idea what the IP 演説(する)/住所 has been doing. I only have to remember "bbc.co.uk".

The number for the internet 関係 you will be putting your ArduServer on probably changes from day to day, and "you" may not yet have a domain 指名する, or a 機械装置 to keep the DNS 記録,記録的な/記録するs up to date. This would be a problem for people trying to visit your webserver without a service like that 供給するd by Dyn.com (以前 known as DynDns.org). The "dynamic" part of DynDns 言及するs to the fact that the IP 演説(する)/住所 associated with your domain, e.g. your "www- thingie", changes from time to time. The DynDns service takes care of this for you. (The also 問題/発行する you with a domain 指名する that is "yours".) But there's a gotcha for those of us who want to use an Arduino as a webserver. Something where you have your router must frequently check the IP 演説(する)/住所 your system has been 割り当てるd. When that 地元の updater finds a change, it passes a message to DynDns. THEY make sure that when people "call" you, i.e. your domain 指名する, they are directed to the 権利 IP 演説(する)/住所. (Sorry... I'll try to explain that better someday... if you 令状 in and tell me it is not (疑いを)晴らす. (Eddress at 底(に届く) of page.))

IMPORTANT BIT: I said "Something where you have your router must frequently check the number your system has been 割り当てるd". In my 事例/患者, I use a "big PC" (a Windows XP machine) to do this. It has to be on all the time to do the update checking, but I don't mind, because I have another webpage... indeed SET of webpages... served by it, so it needs to be on all the time anyway. But for some of you, gentle readers, part of the 推論する/理由 for trying to get an Arduino to do web page serving was to 避ける having a big PC on all the time, wasn't it?

The Good News: Many routers have dyndns updater services built into them. I can't help with the individual 詳細(に述べる)s of all the different routers out there, but if you don't want to leave a PC running to 知らせる DynDns (or another dyndns provider) of your 現在の IP 演説(する)/住所 each time it changes, and it will, then look in your router, and hope that you find an updater. They aren't unusual today. Another possible 解答 is any IP camera you may have on your system. They いつかs have dyndns updaters in them.

A word about "IP 演説(する)/住所". If you run the code above 正確に/まさに as 現在のd, 192.168.0.240 is the "IP 演説(する)/住所" 割り当てるd to the Arduino. (I said you might have to change that. But you won't change it very much, and you won't be able to "see" your Arduino from out on the '逮捕する with that IP 演説(する)/住所.) 192.168.0.240 is one of a 範囲 of IP 演説(する)/住所s 始める,決める aside for "地元の" 演説(する)/住所ing. Part of your router's 職業 is to 現在の a "全世界の" IP 演説(する)/住所 to the outside world... this is the IP 演説(する)/住所 to which DynDns will 言及する requests for your page. Then, within the router, messages for your Arduino web server are re-directed to 192.168.0.240. When answers are 生成するd, they are sent 支援する に向かって whoever asked for them. As the message travels, the router 逆転するs the 過程, and sends the answer out as if it were from the 全世界の IP 演説(する)/住所 on the "outside" of your router, and the 地元の IP 演説(する)/住所 remains hidden.

So... if you are ready to learn more about dyndns services, now is the time to try the 解放する/自由な service from Dyn.com's 場所/位置, one of the providers of such services. ("Dyn.com" was once at "DynDns.org")

I'm sorry... I've made that seem more 複雑にするd than it is. I'll try to re-work it one day. 底(に届く) line: You need a URL, i.e. a "www- thingie" which will bring the world to your router. And getting one isn't so very terrible. In my 事例/患者, for putting my Arduino on line as a server, my URL is mon7nc.dyndns.org. I get the use of that URL from Dyn.com. (What if you have a website, as I do (sheepdogguides.com)? Can you use that? No, not if you are asking the question. If you not only have a website, but are also serving the website, i.e. the computer 持つ/拘留するing the pages of your 場所/位置 are at where ever you are, then yes, probably you could use the URL. But most of us do not serve our own pages. We upload them, across the 逮捕する, to someone else, our "web host", and they take care of 供給するing the server, the computer 持つ/拘留するing the とじ込み/提出するs people fetch when they visit your 場所/位置.)

If you want to 調査する dyndns, and serving webpages, etc, etc, その上の, you might like to look at my FarWatch (警察などへの)密告,告訴(状). FarWatch lets you 監視する 前提s from afar, across the '逮捕する. You won't need big parts of the FarWatch system for putting your Arduino online. (You won't need the "WAMP" stuff.) But FarWatch uses dyndns too, and maybe re-reading "the same" 構成要素, but from another 視野 will help 強固にする/合併する/制圧する your understanding. Or just go to the Dyn.com (以前 known as DynDns.org) 場所/位置, 調印する up, and Just Use It, without worrying too much about "understanding"!

Firewall 問題/発行するs

In the に引き続いて discussion of "your firewall", I am talking about the firewall which I hope you have in your router. Many of us have 多重の firewalls... one in the router, one in each PC connected to it. Happily, you can leave the firewalls in the PCs alone.

This is a good point to remind you that setting up an Arduino connected to the internet may create chinks in your armor. You may be introducing ways for Bad People to "get into" your system to snoop around or 任命する/導入する malware. Your firewall, and the anti-ウイルス (etc) ソフトウェア you do (I 信用) have in your PCs "should" 保護する you... but ーするために connect your Arduino, you are 開始 up a 可能性のある channel for attacks. I don't know enough about the 安全 問題/発行するs to tell you 正確に/まさに how much 危険 you are taking on. How much do you want to do this? I 手配中の,お尋ね者 to do it 不正に enough to take the chance that I was wrong about "firewall should 保護する me".

However... you will almost certainly have to tell your firewall that the Arduino's traffic is okay. If you just get annoyed, and 簡単に turn the firewall 完全に off, I would guess you have a pretty good chance of having problems before long.

Inside your router, there is a marvelous 機械装置 called NAT. We've already discussed it, but didn't give it its 指名する at the time.

NAT stands for "網状組織 演説(する)/住所 Translation". ("網状組織 演説(する)/住所", for our 目的s here, is the same as the "IP 演説(する)/住所" we've spoken of 以前.) 網状組織 演説(する)/住所 translation happens in the router. As I said before, your router "会談 to" the "outside world" through one IP 演説(する)/住所. (That IP 演説(する)/住所 may change from time to time, but it is one 演説(する)/住所, for the 目的s of this section.) For the sake of this discussion, we'll say that your router is 現在/一般に 割り当てるd 80.0.210.5

What if you have two computers on your LAN, and they are both "talking to" the internet?

Each computer will have a 地元の IP 演説(する)/住所, one probably in the form of 192.168.0.xx (or 192.168.yy.xx). Your Arduino, for the 目的s of this section, is just another computer on the LAN. (That's what it is, after all! Just not as expensive (or やめる as 有能な of SOME things) as your "big" computer.

When computer "A", at, let's say, 192.168.0.100, asks for something from the internet, it communicates with the router 経由で 192.168.0.100, but when the router passes the request on to the internet, the internet "sees" that request as coming from your router's 外部の IP 演説(する)/住所, 80.0.210.5 in our シナリオ.

So far, so simple. The really clever bit is that at the same time as computer "A" has asked the internet for something, computer "B" (192.168.0.200) could also be asking for something. And the router will have sent that enquiry out, also "from" 80.0.210.5. When the answers come 支援する, both are sent to 80.0.210.5. Then the router "magically" 大勝するs "A's" answer to 192.168.0.100 on the LAN, and "B's" answer to 192.0.168.200! This really is very 冷静な/正味の... and, happily, something you can (mostly) just leave to the router's silicon 知能.

In "everyday" internet use, you send out a request for something, and let in the answer when it arrives. Which your firewall knows about, and is already 許すing, if you are reading this in a web browser.

To make your Arduino a server, you need to tell your firewall that the opposite is okay. You are 用意が出来ている to receive requests for the stuff your Arduino is serving, and you are willing for the Arduino to send out the 返答s.

Not only do you have to say that this is okay, but you have to tell your router, "When a request for something comes in, send it to the Arduino (192.168.0.240, if you were able to use that IP 演説(する)/住所. I also told you I told you how to change it if necessary. And how to 決定する if it is necessary!)"

Now, as I said in a different 状況, I can't tell you the exact 詳細(に述べる)s of making these settings in each of the さまざまな routers on the market. But here's what I had to do. I have a Netgear DG834G, and it was delightfully 平易な to 始める,決める up... or I just got lucky!

I logged into the router's 行政 pages. (They are a little website in their own 権利. The router is a webpage server while you are changing its settings.)

I clicked on "Firewall 支配するs" in the menu.

I 追加するd an inbound service, using the pre-defined "HTTP/TCP" type of service, made it "許す Always", and told the router "Send to LAN Server 192.168.240". (It isn't 始める,決める up やめる like that now. Don't worry if you've noticed.)

And I said "許す any WAN 使用者s to use this inbound service". (WAN: Wide Area 網状組織, i.e. "the internet".)

My system was already 始める,決める up... in the router's firewall, anyway... to 許す any outbound services, to anyone.

Don't forget that with many routers, you have to save your settings and re-boot the router after making changes before it will be operating によれば the new 支配するs.

And that was it... for the simple 事例/患者 of 追加するing an Arduino as a server on a LAN which didn't already have a computer 供給するing services to the internet.... which may 井戸/弁護士席 be the 事例/患者 you are 取引,協定ing with. (If it isn't, you would know. Don't worry if you are, say, 参加するing in the World Community Grid's 分配するd 過程ing 率先... you don't have a "server" to do that. (高度に recommended, by the way, if you are an altruistic person. No cost to you, if you leave your computer on from time to time. The grid helps with さまざまな 事業/計画(する)s. Some 追求する 科学の 開発s, others support 人道的な 原因(となる)s, others help foster 科学技術の 打開s.)

"Tiny 転換": What is this "port 81" 商売/仕事?

Many of you won't need to worry in 詳細(に述べる) about the next thing I'm going to talk about, but at least skim this 構成要素.

"The 基準" web page serving service operates over "port 80". You don't have to worry too much about "ports". They are another part of the 任命 of the channel though which "stuff" flows through your router going to, or coming from, the internet. For simple "webpage" type "stuff", the port is 80. You don't have to do anything with it, or about it, if your Arduino is the only server on your LAN.

However, if you already have another web page server on your LAN, and you don't want to kick that (hopefully) sleeping dog, ports are your 救済. And those of you with sharp 注目する,もくろむs will have spotted something 半端物 about my Arduino web server which arises from the fact that I did have such a server, which I did not want to 乱す. It is shown on the big diagram as "Other 地元の Server". It is 地元の, as it is on the same LAN as the Arduino. It is not 限られた/立憲的な to serving 地元で, however. It serves up my FarWatch page to anyone, from any place in the world, who comes visiting. (And if anyone on the ISS is connected to the WWW, he or she can see the 天候 and some photos from my FarWatched 前提s from someplace beyond the world.... but I won't worry if little of my traffic is extra-terrestrial.)

So- what did the sharp 注目する,もくろむd の中で you see?

To 接近 my Arduino, when it is online, you enter the に引き続いて into your browser....

http://mon7nc.dyndns.org:81

The ":81" at the end is a little unusual, isn't it? It tells my router, when the request arrives, "Don't send this to the usual place for HTTP (port 80), send it to the 地元の computer you've been told to use for HTTP requests over port 81".

If you can't get into my ArduServer like that, try...

http://mon7nc.dyndns.org

... which should take you to my FarWatch server. (If you get in, you'll see a graph, and if you scroll 負かす/撃墜する, some CCTV images.)

If you do get into FarWatch, but don't get into my ArduServer, it probably means that somewhere at your 場所/位置, 接近 to 非,不,無-基準 ports is 封鎖するd. If you don't get into either 場所/位置, my 関係 to the internet may be 負かす/撃墜する. Rare, but it happens.

Going 支援する to "追加する :81".... that is all the "extra" stuff that 使用者s of pages served by my 場所/位置 need to know, to fetch pages from my ArduServer without getting instead stuff from my pre-存在するing other web server on http://mon7nc.dyndns.org. What, as the server 経営者/支配人s, do you and I have to do, so that the requests for the Arduino go to it?

First, you have to make two changes in the Arduino program 名簿(に載せる)/表(にあげる)d above. You have to change the line...

#define myport 80

You make it say 81, if you want to use port 81. And you have to 追加する ":81" (or whatever port you are using) to the line that says something like....

static char baseurl[]="http://YourUrl.dyndns.org/";

... and make it...

static char baseurl[]="http://YourUrl.dyndns.org:81/";

(Of course, in your 事例/患者 that line will have something different in place of "YourUrl.dyndns.ord". Just follow the pattern, which I've tried to make (疑いを)晴らす.)

Recompile the code, re-upload it to your Arduino. Simples!

You may 井戸/弁護士席 find that you are already able to see your Arduino served pages 経由で 192.168.0.240:81 if you try to 接近 them across your LAN. (But even that simple 演習 may be 封鎖するd by your PC's anti-malware settings. Try to 接近 the page over your LAN... and look at your anti-malware settings (besides other things) if you don't 後継する.)

However, for the outside world to "see" your pages across port 81, not only do they need to 追加する the ":81" to the URL, but you need to give your router some 指示/教授/教育s.

In my NetGear router, it was as simple as going to "Services", and 追加するing a new "custom service". I called it "Ardu", made it of type "TCP", 始める,決める the start port to 81 and the end port to 81.

I then went to the same "Firewall 支配するs" as discussed 以前, and 追加するd a new inbound service 支配する 説 that service "Ardu" should always be 許すd, and that its traffic should be sent to LAN server 192.168.0.240.





Bigger, and MUCH Better......


What ArduServer client sees

Beyond "Hello World".....


Where we are going next...



In a little while, I will give you the 完全にするd code for a much fancier ArduServer. It will 現在の a page with two buttons on it, and those buttons will turn an LED on the Arduino on and off, from anywhere in the world. The Arduino will also have a light level sensor, and the LED will 向こうずね on that, and the web page will 報告(する)/憶測 how 有望な the light on the sensor is. The LED and light sensor are, of course, not going to be what you want on your Arduino. I hope you see that they are just illustrations of 運動ing and 生産(高), sensing an input? (The page once also had a 無作為の number which changed each time you click a button. That has been changed to a field that 報告(する)/憶測s how many requests the server has had from (弁護士の)依頼人s since it was last rebooted.)

But, even though I am only giving you the "finished", "does everything" code, I am going to tell you how it was built up, so that you can adapt it to your needs.

I'm not going to tell you every 詳細(に述べる). For instance, I'll assume you'll know to put a line in 体制/機構() to configure the line controlling the LED as an 生産(高).

Input to Arduino, and 陳列する,発揮するing

what the Arduino senses on the web page....

This was one of those "計算するing moments" we've all had.

追加するing lines to the 生産(高) of the webserver is やめる 平易な... The に引き続いて, 挿入するd after the "Hello World" line in the first program, would 追加する "To infinity..."

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>To infinity..."));

You just need the....

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("x"));

... stuff, and you change the x to the text you want 陳列する,発揮するd. Yes, there are "codes" ("HTML tags) which you can 挿入する to "fancy things up", but 基本的に, it is all text, and you just put it in place of the x. Those codes are enclosed in いっそう少なく-than, <, and greater-than, >, 調印するs, <like this>, and 一般に come in pairs, with a / before the second instance...

<h2>This would be 令状 large</h2>

That's your "How to 令状 HTML" lesson for today!

But.

What if you have something in a variable? That should be 平易な, 権利?

井戸/弁護士席, I'm sure I'm 行方不明の something. (I even have an idea of what it is!) But you can't even do the に引き続いて, even if sTmp is a variable 有能な of 持つ/拘留するing a string....

sTmp="Hello World";
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(sTmp));

... and you certainly can't 陳列する,発揮する the value 蓄える/店d in an integer variable...

iTmp:=432;
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(iTmp));

... but I'll show you some code which isn't doing anything more than that should do. The code looks terrifying, but you only have to copy/ paste/ use.... not understand. Before we get to that...

First catch your light level....

I don't know as much as I would like to about phototransistors, but I do know enough. The に引き続いて 作品! (I used an SFH300 NPN phototransistor.) Connect the "生産(高)" below to the Arduino's Analog3 input... i.e. the fourth one. (The first was "Analog0") And the ground of the に引き続いて to the Arduino's ground, and Vcc to the Arduino's Vcc.) The voltage where the resistor and phototransistor join, 親族 to ground, will change as the light level 落ちるing on the phototransistor changes. (If you are new to voltage dividers, I have a page of introduction for you. The link will open in a new tab or window, making it 平易な to 再開する your reading here later.)

Schematic of phototransistor connection

Lots of good news: As long as you keep the resistor above about 1k, I don't think you can go wrong "just trying things". Knowing "the 権利" phototransistor, "the 権利" resistor, etc, will 改善する your light level 手段ing... but what I've told you is enough for our needs. You may be using a different sort of light level sensor, anyway, after all!

The Arduino's analog to 数字表示式の 転換 能力s make reading the changing voltage 平易な. You can put...

sensorValue = analogRead(sensorPin);

... into the program. The "obvious" place to put it is at the 最高の,を越す of the "宙返り飛行()" subroutine. As long as you have 宣言するd sensorValue as an integer variable, and 始める,決める sensorPin to A3, or whichever channel you want to use for reading the light level, that will "work"... but it gives rise to a problem that I'll explain another time, as a curiosity.

To 避ける that problem, it is better (in some ways, if not in keeping your code "clean" and 論理(学)の) to put the analogRead 声明 at the start of the "print_webpage" subroutine.

To "宣言するd sensorValue as an integer variable...", you use...

int8_t sensorPin = A3;  // 指定する the input pin for a sensor... a phototransistor used in example
   //"A3" is a funny sort of "number"... but it is 始める,決める to what we need by things 深い inside
   //the Arduino IDE.

Once upon a time, when I had the phototransistor in a very わずかに different 回路・連盟, analogRead(sensorPin) returned a low value when the phototransistor was illuminated, and a higher value when in darker 条件s. This wasn't very intuitive, but subtracting the value returned from 1023 (the 最大限 possible returned value) inverted the results, giving the web page 使用者 something more "sensible": A big number for a 有望な light, a lower number for a 薄暗い one. (On 13 October, 2011, I re-wired the phototransistor 回路・連盟, and after that, subtracting from 1023 was no ぐずぐず残る needed.)

So.. the Arduino is reading the light level into the "int" variable sensorValue.. but we still have to 報告(する)/憶測 it to the reader of the webpage the ArduServer serves up.

報告(する)/憶測ing the value seen on the input

The values I was getting from the phototransistor, after inversion, were about 300 (dark) and 700 (light). その上の 負かす/撃墜する in print_webpage, 最初 I used.....

        if (sensorValue < 500)
        {plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Phototransistor in dark"));}
        else
        {plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Phototransistor in light"));};

That worked just 罰金... and it 避けるd the tedious 問題/発行する of how to get a number from a variable の上に the web page.

But we really should be able to do that, should be able to 陳列する,発揮する a number from a variable. The に引き続いて "ain't pretty"... but it DOES work! (Thank you, NuElectronics, for the second part. And 陳謝s for the first. This can certainly be Done Better... A nice "演習 for the student, Gentle Reader!)

 //First, make a string out of the number in sensorValue.
 //  蓄える/店 it in temp_string.
 //Assumes sensorValue <2000. (The max returned by analogRead is 1023,
 //so as long as that's where sensorValue is coming from, you're okay.)

 i=0;
 if (sensorValue>999)
   {temp_string[i]='1';
   i++;
   sensorValue=sensorValue-1000;
   };

 i2=0;
 while (sensorValue>100)
  {i2++;
   sensorValue=sensorValue-100;
  };
 temp_string[i]=48+i2;
 i++;

 i2=0;
 while (sensorValue>10)
  {i2++;
   sensorValue=sensorValue-10;
  };
 temp_string[i]=48+i2;
 i++;

 i2=0;
 while (sensorValue>1)
  {i2++;
   sensorValue=sensorValue-1;
  };
 temp_string[i]=48+i2;
 i++;

 temp_string[i]=0;//示す end of string

 plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>Light level: "));


 //Now 原因(となる) the characters in temp_string to become part
 //  of the webpage that ArduServer will return...

 i=0;
 while (temp_string[i]) {

         buf[TCP_CHECKSUM_L_P+3+plen]=temp_string[i++];
         plen++;
       }

 plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));

公式文書,認める that we are using a わずかに different approach here. I'm pretty sure that inside the "while" 宙返り飛行 we are 単に moving some things into a 衝撃を和らげるもの, and they are, as it were, "appended" ahead of the "<br>" which we 結局 send to the web page.

Remember: The コンビナート/複合体 bit of code just 現在のd 単に takes the number in sensorValue and passes it to the web page ArduServer is 現在のing.

With that code in place, I 実験(する)d what I had so far by fetching the web page with the phototransistor illuminated and with it dark, and made sure that the light level 報告(する)/憶測d changed accordingly. I just shone a flashlight on it, and fetched the page. A bit cruder than the 結局の goal!

So! We can read, from anywhere on the web, the 明言する/公表する of an input to the Arduino that is serving up the web page. Half the 職業 done!

Making the 明言する/公表する of 生産(高)s from the Arduino change when 使用者s click on buttons on the webpage

The web page has two buttons, which are created with HTML "forms" tags. But before I start on that, I want to create something I can call for turning the LED on or off 簡単に by calling a subroutine.

The subroutine is called "LEDOnOff", and it takes one parameter. If you say "LEDOnOff(0)", the LED goes off. Say "LEDOnOff(1)", and the LED goes on. Always try to encapsulate the elements of anything you do. The subroutine is as follows....

無効の LEDOnOff(byte bOnOff)
{
//When 0 is passed to the subroutine: Turn the LED off.
//   If something else is passed, turn the LED on.
if (bOnOff==0)
{digitalWrite(ledPin,LOW);}
else
{digitalWrite(ledPin,HIGH);};
}

Nothing very "clever" in that. Good. I like "not clever" things... easier to debug.

Sadly, the 機械装置 for creating a button on the form, and for 反応するing to 使用者s clicking it isn't nearly so simple.

First, let me show you the HTML which you have to 原因(となる) to be 追加するd to the webpage the ArduServer is serving...

<form METHOD=get 活動/戦闘="{see text}">
<input type=hidden 指名する=cmd value=1>
<input type=服従させる/提出する value="LED Off">
</form>

<form METHOD=get 活動/戦闘="{see text}">
<input type=hidden 指名する=cmd value=2>
<input type=服従させる/提出する value="LED On">
</form>

熟考する/考慮する that. The first thing you notice, I hope, is that "it" is two things... very 類似の to one another.

Let's get the "see text" bit out of the way first. Somehow... I 港/避難所't 分析するd it in 詳細(に述べる) (yet!), it is possible to pass some variables to the 命令(する)s which put things into the webpage ArduServer serves. (It is probably a simple(?) 事柄 of the type (in the 狭くする, programmer's, sense of that 称する,呼ぶ/期間/用語) of variable 伴う/関わるd.) Within the program below, in the 関連した lines, you will find that if the ArduServer resides at mon7nc.dyndns.org, then the first line in each of the halves of the 構成要素 above turns into...

<form METHOD=get 活動/戦闘="http://mon7nc.dyndns.org">

The "http://mon7nc.dyndns.org" will have come from the variable baseurl[].

Now then. I can't pretend to understand a lot about using the HTML "form" tags... but I've 人物/姿/数字d out enough, from the NuElectronics デモ "etherShield_web_temperature.pde", and the excellent Embedded Ethernet and Internet 完全にする, by Jan Axelson, to build the webpage we're working on, and adapt our first program to 答える/応じる to it in a 満足な manner.

As I said, the two 封鎖するs of HTML above will 原因(となる) two buttons to appear on the form. They will be labeled "LED On" and "LED Off".

When you click either one, I'm not 100% sure of what EXACTLY happens, but I do know that the 影響 is almost like 原因(となる)ing something to be typed into the 演説(する)/住所 box of the internet browser which was 存在 used to click on the button. That, by the way, may or may not be 伴う/関わるd in EVERY use of the "form" and "input" and "服従させる/提出する" HTML tags... but the way they are put together here, and the ソフトウェア in the server they are 存在 sent to work like that... WITH a frill I 港/避難所't について言及するd yet.

Not only does the code in the server at least seem to be typing something into the 演説(する)/住所 妨げる/法廷,弁護士業 of the browser running in the (弁護士の)依頼人, but WHAT it types isn't 単に the URL of the page the buttons are on.

You can see what the ArduServer is doing, when you use the 場所/位置.

Click on mon7nc.dyndns.org:81, but don't (yet) click on either button. Look at what's in the 演説(する)/住所 box after you've 圧力(をかける)d enter and the page has 負担d. A "/" may have been 追加するd at the end, and the "http://" at the 前線, but these aren't major changes.

Now click on the "LED On" button, and look at the 演説(する)/住所 box again.

Not only did clicking on the button reload the page, but it reloaded it with something 追加するd to where we went, the "?cmd=2" part. (In fact, it doesn't have to RE-負担 the page the button is on... it could 負担 any page. And 追加する anything to the line before the 負担.)

Why did it do that? Because we told it to, in the code of the server. I'll show you the 詳細(に述べる)s in a moment. But first, click on the "LED Off" button. This time the page reloads, but with "?cmd=1", 権利?

When the server 答える/応じるs to the 後継の request for "stuff" to be sent to the (弁護士の)依頼人, it looks at the line that 原因(となる)d the request to go to the server... it is passed across the internet along with things like where to send the answer. In the code in the server, it looks for a question 示す in the line that 原因(となる)d the request. If it doesn't find one, it doesn't do anything special, it just sends the page that was asked for.

If the line coming in has a question 示す in it, as it will, as a result of how the "form" and "input" and "服従させる/提出する" HTML tags work, when they are as we have them, the server's ソフトウェア looks at what comes after the question 示す. The word "cmd" isn't "全世界の/万国共通の", it isn't part of the basic 鮮明度/定義s of HTML. There was a cmd after the question 示す because we put "cmd" in our <input type=hidden 指名する=cmd...> line.

Whew. 深い breath. It gets just a little deeper, and then we start rising 支援する to the surface.

You have to dig a little in the code for the simple webserver デモ from NuElectronics, but when you do, you'll find something that it didn't 現実に need! The code that is so helpful is...

cmd=analyse_cmd((char *)&(buf[dat_p+5]));
        if (cmd==1){
             plen=print_webpage(buf);

I'll take you through that in just a moment. But first a 約束: The code isn't very "fancy". Understanding it will be 平易な... compared to understanding why it was put where it was, and building all the things we're not even going to look at which make it work!

What does it say?

It says, "Put something in the variable called "cmd""

That "something" is whatever's after the equals 調印する after the "cmd" which was in the line from the (弁護士の)依頼人 browser. ("cmd" is used twice here, for two different things. It might have been better to give the variable in the server code a 指名する like "CmdWas" or somesuch, to say that "in this variable, we are going to have whatever was after the "cmd=" from the (弁護士の)依頼人." But you're a Programmer. You can understand this. (And you will 令状 your own programs with より小数の such ambiguities, won't you?))

So... if the line from the browser was....

http://mon7nc.dyndns.org:81/?cmd=1

... then the code we're looking at, so far, has put a "1" in the variable cmd.

Next the code says, "If there is a 1 in the variable called cmd, then do....

plen=print_webpage(buf);

I don't know a lot about that... nor do I want to. Someone else has taken care of getting the 権利 thing into "buf" already. I don't know what will subsequently be done with plen, nor do I care. But I know that calling "print_webpage()" sends a page of stuff to the (弁護士の)依頼人 out there on the internet, the (弁護士の)依頼人 that asked for something.

As written, the (弁護士の)依頼人 will just get the same page 支援する again. And, as written, the code only 答える/応じるs to the 事例/患者 when the line coming in has "?cmd=1" at the end. Have a look at what I put in the server code to 取って代わる what we've just been talking about....

if ((cmd==1)||(cmd==2)){ //first level of nesting
      if (cmd==1)
          {LEDOnOff(0);延期する(100);}
        else
          {LEDOnOff(1);延期する(100);};
      plen=print_webpage(buf);
      }// first level of nesting

That says...

If cmd has a 1 or a 2 in it, then do the に引き続いて....

    If it has a 1 in it, then.....
           Call LEDOnOff(0) (the thing we built earlier. Turns LED off)
           Wait 簡潔に (so that the LED has become dark,
                               before we get to the "read light sensor" bit)
    (さもなければ, if it doesn't have a 1, else...)
           Call LEDOnOff(1) (Turn LED on)
           Wait 簡潔に

    And then: Send out the webpage that the (弁護士の)依頼人 requested.

Almost too simple? The Nice People at NuElectronics have done all the hard work. We just had to find the 権利 place to make our little tweak!



At last... the sourcecode...

And so, faithful reader, we reach the end.

I have put the 十分な code for the second program 現在のd in this tutorial on a separate page.





I hope that was useful...

I hope that was useful. Let me know if there are areas which weren't adequately explained? Let me know what "Gotchas" got you?

Please remember that the (警察などへの)密告,告訴(状) here is 完全に 非公式の. It has not been written by or 是認するd by the people who brought us the NuElectronics Ethernet 保護物,者.




Search for other things...


Please 公式文書,認める that I have two other 場所/位置s, and that the に引き続いて search will not 含む them. They have their own search buttons.

My Sheepdog Guides 場所/位置.
My Arunet 場所/位置.

   Search this 場所/位置 or the web        力/強力にするd by FreeFind
 
  場所/位置 search Web search
場所/位置 地図/計画する    What's New    Search
The search engine 単に looks for the words you type, so....
*    (一定の)期間 them 適切に.
*    Don't bother with "How do I get rich?" That will 単に return pages with "how", "do", "I"....

You can also search this 場所/位置 without using forms.
広告 from page's editor: Yes.. I do enjoy 収集するing these things for you... hope they are helpful. However.. this doesn't 支払う/賃金 my 法案s!!! If you find this stuff useful, (and you run an MS-DOS or Windows PC) please visit my freeware and shareware page, download something, and 循環させる it for me? Links on your page to this page would also be 高く評価する/(相場などが)上がるd!
Click here to visit editor's freeware, shareware page.


Want a 場所/位置 hosted, or email? You can also help me if you 調印する up 経由で this link to 1&1's services. (I wouldn't recommend them unless I was happy after several years as one of their 顧客s, but yes, they do 支払う/賃金 me if you use this link! As do the Google advertisers, about whom I know nothing, of course.)



Valid HTML 4.01 Transitional Page 実験(する)d for 同意/服従 with INDUSTRY (not MS-only) 基準s, using the 解放する/自由な, 公然と accessible validator at validator.w3.org

CSS behind the page checked, at least once upon a time!, with http://jigsaw.w3.org/css-validator/
Why does this page 原因(となる) a script to run? Because of the Google パネル盤s, and the code for the search button. Also, I have some of my pages' traffic 監視するd for me by eXTReMe tracker. They 申し込む/申し出 a 解放する/自由な tracker. If you want to try one, check out their 場所/位置. Why do I について言及する the script? Be sure you know all you need to about spyware.


Editor's Main Homepage
How to email or 令状 this page's editor, Tom Boyd

....... P a g e . . . E n d s .....