It is not wrong to feel upset. There’s no such thing as having “the wrong feelings,” so however you feel right now is perfectly valid. It’s not selfish to want your long-term boyfriend to try hard for your birthday, and it’s not irrational to be disappointed that he didn’t.
The big issue is not that he doesn’t have a lot of money. The big issue is the broken promise. He said things would be different. You were excited, and that excitement quickly turned into crushing disappointment. And to add insult to that, he didn’t even get you anything. He couldn’t spare three bucks to get a nice card.
Your boyfriend was using his lack of money to mask his lack of sensitivity. I suggest you sit down and have a serious conversation about how he feels and where he sees the relationship going. If he’s screwing up on your birthday year after year, I’m willing to bet he’s screwing a lot of other things up as well. And you need to take a good, hard look about whether you want that in your life in the future.