Nintendo Wii has the possibility to define characters that represent you in the games. You have the possibility to change these characters. To do that you need the one or the other Mii editor.

If you just want to cut to the chase and download a whole bunch of Mii’s you can do that here.
There are several possibilities which can be used. Of course you can do it using the Wii which is the traditional way but there are other options.
First there is the My Avitar Editor. This is a swf file which can be run in execution mode on your PC. You get the screen below where you can edit, change and even save to picture file on your PC.
On these links you can do this online. http://www.codejunkies.com/miieditor/ and http://www.miisearch.com/mii-creator.html
The second option is to use a dedicted program  which configues your file in the same way. (The middle picture is the Wii Mii editor v1.2)
The files that are produced are mae (Mii avitar editor) files or mii files but both are identical.  Once you have generated these files you can upload them to this site http://www.miicharacters.com/wii.php?mii=188 and get the helpfull instructonal that is pictured on the right. If you want to generate a Mii from the instruction set you have to start with the default characters.  These are defaultBoy.mae and defaultGrl.mae.
There is also the possibility to make a special Mii. You can read about it here. http://www.davidhawley.co.uk/special-miis-gold-pants-and-creating.aspx
What i normally do is generate a set of Wii instruction as the picture below. These i then enter them manually into the Wii.
I find this the easiest way to make Mii’s and get them into the Wii.

miiAlbert-EmiiAli-GmiiBas

mii avatar editormiiavatarresultsmiiinstructions

 

Now follows the hexdump of a Mii file.

miifile

 

Mii file build up

They are 74 0x4A bytes long.
Their meaning can be found here http://wiibrew.org/wiki/Mii_Data.

// addr: 0x00 & 0x01   0D D2     0000 1101 1101 0010
	 invalid:1            ;--|                    = 0     = valid   // doesn't seem to have any effect?
	 isGirl:1             ;---|                   = 0     = male    // gender
	 month:4              ;----|   |              = 0011  = 3 = march   // birthday month
	 day:5                ;---------|    |        = 01110 = 14        // birthday day
         favColor:4           ;----------------|  |   = 01001 =  9		 // 0 - 11 Keep in this range or else things can go wrong
	 isFavorite:1         ;--------------------|  = 0
// addr: 0x02 through 0x15 name[MII_NAME_LENGTH]; 00 41 00 6C 00 62 00 65 00 72 00 74 00 20 00 45 00 00 00 00 Albert E
// addr: 0x16 height; // 0 - 127
// addr: 0x17 weight; // 0 - 127
// addr: 0x18 - 0x1B
 	 miiID1; 	           // Unique Mii identifier. Seems to increment with time. Also can
         miiID2; 	           // be used to change colour of Mii Trousers (see 'See Also' links)
 	 miiID3;
 	 miiID4;
// addr: 0x1C through 0x1F
	 systemID0;	 // Checksum8 of first 3 bytes of mac addr
	 systemID1;	 // mac addr 3rd-to-last byte
	 systemID2;	 // mac addr 2nd-to-last byte
	 systemID3;	 // mac addr last byte
// addr: 0x20 & 0x21
	 faceShape:3; // 0 - 7
	 skinColor:3; // 0 - 5
	 facialFeature:4; // 0 - 11
	 unknown:3; // Mii appears unaffected by changes to this data
	 mingleOff:1; // 0 = Mingle, 1 = Don't Mingle
	 unknown:1; // Mii appears unaffected by changes to this data
	 downloaded:1; // If the Mii has been downloaded from the Check Mii Out Channel
// addr: 0x22 & 0x23
	 hairType:7; // 0 - 71, Value is non-sequential with regard to page, row and column
	 hairColor:3; // 0 - 7
	 hairPart:1; // 0 = Normal, 1 = Reversed
	 unknown:5;
// addr:0x24 through 0x27
	 eyebrowType:5; // 0 - 23, Value is non-sequential with regard to page, row and column
	 unknown:1;
	 eyebrowRotation:4; // 0 - 11, Default value varies based on eyebrow type
	 unknown:6;
	 eyebrowColor:3; // 0 - 7
	 eyebrowSize:4;	 // 0 - 8, Default = 4
	 eyebrowVertPos:5; // 3 - 18, Default = 10
	 eyebrowHorizSpacing:4; // 0 - 12, Default = 2
// addr: 0x28 through 0x2B
	 eyeType:6; // 0 - 47, Value is non-sequential with regard to page, row and column
	 unknown:2;
	 eyeRotation:3; // 0 - 7, Default value varies based on eye type
	 eyeVertPos:5; // 0 - 18, Default = 12
	 eyeColor:3; // 0 - 5
	 unknown:1;
	 eyeSize:3; // 0 - 7, Default = 4
	 eyeHorizSpacing:4; // 0 - 12, Default = 2
	 unknown:5;
// addr: 0x2C & 0x2D
	 noseType:4; // 0 - 11, Value is non-sequential with regard to row and column
	 noseSize:4; // 0 - 8, Default = 4
	 noseVertPos:5; // 0 - 18, Default = 9
	 unknown:3;
// addr: 0x2E & 2F
	 lipType:5; // 0 - 23, Value is non-sequential with regard to page, row and column
	 lipColor:2; // 0 - 2
	 lipSize:4; // 0 - 8, Default = 4
	 lipVertPos:5; // 0 - 18, Default = 13
// addr: 0x30 & 0x31
	 glassesType:4; // 0 - 8
	 glassesColor:3; // 0 - 5
	 unknown:1; // when turned on mii does not appear (use not known)
	 glassesSize:3; // 0 - 7, Default = 4
	 glassesVertPos:5; // 0 - 20, Default = 10
// addr: 0x32 & 33
	 mustacheType:2; // 0 - 3
	 beardType:2; // 0 - 3
	 facialHairColor:3; // 0 - 7
	 mustacheSize:4; // 0 - 8, Default = 4
	 mustacheVertPos:5; // 0 - 16, Default = 10
// addr: 0x34 & 0x35
	 moleOn:1; // 0 = No Mole, 1 = Has Mole
	 moleSize:4; // 0 - 8, Default = 4
	 moleVertPos:5; // 0 - 30, Default = 20
	 moleHorizPos:5; // 0 - 16, Default = 2
	 unknown:1; 
// addr: 0x36 through 0x49  	 creatorName[MII_CREATOR_NAME_LENGTH];

You can  upload and download Mii data into the Wii.
Its quite a complicated process and the details of how to do can be found here.  http://www.wiibrew.org/wiki/Homebrew_setup

miichannel

The Mii data is stored on the Wiimote in two blocks. Each block is composed of 750 bytes of Mii data, followed by a 2 byte CRC. If the data in the first block does not match the CRC for that block, the second block is used instead. At that point, if the CRC of the second block does not match its data, no Mii data will be available.
The blocks are 752 bytes in length (0x2f0 bytes), and are stored consecutively starting at address 0x0fca in the Wiimote memory.

At the beginning of each block, there is a 4-byte value (‘RNCD’) which may be a Mii software version number, as it is the same across multiple Wiis and multiple Wiimotes. After these 4 bytes, there are 2 bytes which determine which slots are Mii parade slots. Left shift 0x0001 by the slot number to set it as Mii parade (hidden when viewed on the Wiimote). If a slot is empty, or filled by a non-parade Mii, its parade slot bit will be set to 0.
The last two bytes of the block are a CRC-16 CCITT of the previous 750 bytes (polynomial 0x1021, starting value 0x0000).
This is a short (but working) version of the CRC calculation algorithm, written in Java (should be easy to adapt for arduino IDE).
You could using a SD shield adapt such a block dataset and upload it directly into the wii. There are a number of programs that can do that. You can find them here http://wiibrew.org/wiki.


mii_extractormii_installer Here the CRC algorithm:

 /**
  * Calculate a modified CRC16-CCITT checksum of a byte array, as used for
  * checking the validity of a Mii data block stored on a Wiimote.
  *
  * @param bytes the byte array to calculate the checksum for
  * @return the checksum (in the lower 16 bits)
  */
 static int crc (byte[] bytes) {
     int crc = 0x0000;
     for (int byteIndex = 0; byteIndex < bytes.length; byteIndex++) {
         for (int bitIndex = 7; bitIndex >= 0; bitIndex--) {
             crc = (((crc << 1) | ((bytes[byteIndex] >> bitIndex) & 0x1)) ^
             (((crc & 0x8000) != 0) ? 0x1021 : 0));
         }
     }
     for (int counter = 16; counter > 0; counter--) {
         crc = ((crc << 1) ^ (((crc & 0x8000) != 0) ? 0x1021 : 0));
     }
     return (crc & 0xFFFF);
 }

Here the complete block file including the CRC check at the end.

 miitable
 Finally you can find a whole load of Mii files here.

miiObamamiiMichelleObmiiShaggy

miiPottermiiTrinitymiiJackson

If you are looking for other arduino projects look here.

Where do you want to navigate to:
arduino projects Many complex arduino projects for you to understand and try.
arduino totorial About how to use the arduino for interfacing to integrated circuits.
arduino webshop Buy my PCB’s and some of the components.
arduino shields  The shields that i have developed.
arduino leonardo The new arduino board with some tips, tricks and projects to try out.
arduino Home page of the site

Leave a Comment